From 1859434d902abb3b2a38955d8b99a01ab79de3be Mon Sep 17 00:00:00 2001 From: Zander Thannhauser Date: Mon, 18 Aug 2025 21:28:46 -0500 Subject: [PATCH] all tests pass --- main.c | 1125 +++++++++++++++------------------------- test.py | 24 +- tests.json | 1464 +++++++++++++++++++++++++++++++--------------------- 3 files changed, 1314 insertions(+), 1299 deletions(-) diff --git a/main.c b/main.c index 01e6e80..3e2d32d 100644 --- a/main.c +++ b/main.c @@ -246,10 +246,6 @@ struct expression ek_remainder, ek_exponent, - // bitwise operator: - ek_leftbitshift, - ek_rightbitshift, - // comparision operators: ek_greater_than, ek_less_than, @@ -313,7 +309,7 @@ struct expression* new_literal_expression( struct expression* this = malloc(sizeof(*this)); this->kind = ek_literal; - this->string = NULL;; + this->string = NULL; this->center = NULL; this->left = this->right = NULL; this->value = inc_value(value); @@ -339,46 +335,13 @@ struct expression* new_variable_expression( return this; } -struct expression* new_logical_not_expression( +struct expression* new_unary_expression( + enum expression_kind kind, struct expression* sub) { struct expression* this = malloc(sizeof(*this)); - this->kind = ek_logical_not; - this->string = NULL; - this->center = inc_expression(sub); - this->left = NULL; - this->right = NULL; - this->value = NULL; - - this->refcount = 1; - - return this; -} - -struct expression* new_positive_expression( - struct expression* sub) -{ - struct expression* this = malloc(sizeof(*this)); - - this->kind = ek_positive; - this->string = NULL; - this->center = inc_expression(sub); - this->left = NULL; - this->right = NULL; - this->value = NULL; - - this->refcount = 1; - - return this; -} - -struct expression* new_negative_expression( - struct expression* sub) -{ - struct expression* this = malloc(sizeof(*this)); - - this->kind = ek_negative; + this->kind = kind; this->string = NULL; this->center = inc_expression(sub); this->left = NULL; @@ -774,11 +737,9 @@ enum token // comparision operators: t_lessthan, t_lessthan_equals, - t_lessthan_lessthan, t_greaterthan, t_greaterthan_equals, - t_greaterthan_greaterthan, t_emark_equals, t_equals_equals, @@ -823,7 +784,7 @@ static const char* const tokennames[number_of_tokens] = { [t_equals_equals] = "equal-to", [t_vbar_vbar] = "logical-or", [t_ampersand_ampersand] = "logical-and", - [t_emark] = "exclamation mark", + [t_emark] = "exclamation-mark", [t_qmark] = "question mark", [t_colon] = "colon", [t_equals] = "assignment", @@ -895,16 +856,15 @@ enum tokenizer_state { ts_minus, ts_qmark, ts_emark, + ts_emark_equals, ts_colon, ts_percent, ts_asterisk, ts_asterisk_asterisk, ts_lessthan, ts_lessthan_equals, - ts_lessthan_lessthan, ts_greaterthan, ts_greaterthan_equals, - ts_greaterthan_greaterthan, ts_equals_equals, ts_slash_slash, @@ -912,12 +872,14 @@ enum tokenizer_state { ts_cparen, ts_vbar_vbar, + ts_ampersand_ampersand, ts_start, ts_reading_literal_prefix, ts_reading_literal, ts_reading_literal2, + ts_reading_literal3, ts_reading_literal_binary, ts_reading_literal_binary2, ts_reading_literal_hexadecimal, @@ -934,16 +896,15 @@ enum tokenizer_state { ts_reading_minus, ts_reading_qmark, ts_reading_emark, + ts_reading_emark_equals, ts_reading_colon, ts_reading_asterisk, ts_reading_asterisk_asterisk, ts_reading_percent, ts_reading_lessthan, ts_reading_lessthan_equals, - ts_reading_lessthan_lessthan, ts_reading_greaterthan, ts_reading_greaterthan_equals, - ts_reading_greaterthan_greaterthan, ts_reading_oparen, ts_reading_cparen, @@ -951,6 +912,9 @@ enum tokenizer_state { ts_reading_vbar, ts_reading_vbar_vbar, + ts_reading_ampersand, + ts_reading_ampersand_ampersand, + number_of_tokenizer_states, } tokenizer_lookup[number_of_tokenizer_states][128] = { #define ANY 0 ... 127 @@ -998,6 +962,8 @@ enum tokenizer_state { [ts_reading_literal2][ ANY ] = ts_literal, [ts_reading_literal2][ '_' ] = ts_reading_literal2, [ts_reading_literal2]['0' ... '9'] = ts_reading_literal2, + [ts_start][ '.' ] = ts_reading_literal3, + [ts_reading_literal3]['0' ... '9'] = ts_reading_literal, // identifiers: [ts_start][ '_' ] = ts_reading_identifier, @@ -1017,7 +983,7 @@ enum tokenizer_state { [ts_start]['?'] = ts_reading_qmark, [ts_reading_qmark][ANY] = ts_qmark, - [ts_start]['!'] = ts_reading_emark, [ts_reading_emark][ANY] = ts_emark, + [ts_start][','] = ts_reading_comma, [ts_reading_comma][ANY] = ts_comma, [ts_start][':'] = ts_reading_colon, [ts_reading_colon][ANY] = ts_colon, @@ -1026,6 +992,12 @@ enum tokenizer_state { [ts_start]['('] = ts_reading_oparen, [ts_reading_oparen][ANY] = ts_oparen, [ts_start][')'] = ts_reading_cparen, [ts_reading_cparen][ANY] = ts_cparen, + // '!' or '!=': + [ts_start]['!'] = ts_reading_emark, + [ts_reading_emark][ANY] = ts_emark, + [ts_reading_emark]['='] = ts_reading_emark_equals, + [ts_reading_emark_equals][ANY] = ts_emark_equals, + // '*' or '**' [ts_start]['*'] = ts_reading_asterisk, [ts_reading_asterisk][ANY] = ts_asterisk, @@ -1044,26 +1016,27 @@ enum tokenizer_state { [ts_reading_equals]['='] = ts_reading_equals_equals, [ts_reading_equals_equals][ANY] = ts_equals_equals, - // '<' or '<=' or '<<': + // '<' or '<=': [ts_start]['<'] = ts_reading_lessthan, [ts_reading_lessthan][ANY] = ts_lessthan, [ts_reading_lessthan]['='] = ts_reading_lessthan_equals, [ts_reading_lessthan_equals][ANY] = ts_lessthan_equals, - [ts_reading_lessthan]['<'] = ts_reading_lessthan_lessthan, - [ts_reading_lessthan_lessthan][ANY] = ts_lessthan_lessthan, - // '>' or '>=' or '>>': + // '>' or '>=': [ts_start]['>'] = ts_reading_greaterthan, [ts_reading_greaterthan][ANY] = ts_greaterthan, [ts_reading_greaterthan]['='] = ts_reading_greaterthan_equals, [ts_reading_greaterthan_equals][ANY] = ts_greaterthan_equals, - [ts_reading_greaterthan]['>'] = ts_reading_greaterthan_greaterthan, - [ts_reading_greaterthan_greaterthan][ANY] = ts_greaterthan_greaterthan, // '||': [ts_start]['|'] = ts_reading_vbar, [ts_reading_vbar]['|'] = ts_reading_vbar_vbar, [ts_reading_vbar_vbar][ANY] = ts_vbar_vbar, + + // '&&': + [ts_start]['&'] = ts_reading_ampersand, + [ts_reading_ampersand]['&'] = ts_reading_ampersand_ampersand, + [ts_reading_ampersand_ampersand][ANY] = ts_ampersand_ampersand, }; void tokenizer_next( @@ -1198,6 +1171,12 @@ void tokenizer_next( break; } + case ts_emark_equals: + { + this->token = t_emark_equals; + break; + } + case ts_lessthan: { this->token = t_lessthan; @@ -1228,30 +1207,36 @@ void tokenizer_next( break; } + case ts_ampersand_ampersand: + { + this->token = t_ampersand_ampersand; + break; + } + case ts_slash_slash: { this->token = t_slash_slash; break; } - case ts_lessthan_lessthan: - { - this->token = t_lessthan_lessthan; - break; - } - - case ts_greaterthan_greaterthan: - { - this->token = t_greaterthan_greaterthan; - break; - } - case ts_asterisk_asterisk: { this->token = t_asterisk_asterisk; break; } + case ts_greaterthan: + { + this->token = t_greaterthan; + break; + } + + case ts_greaterthan_equals: + { + this->token = t_greaterthan_equals; + break; + } + default: TODO; break; @@ -1355,7 +1340,15 @@ struct expression* parse_primary(struct tokenizer* tokenizer) } else { - TODO; + struct string* message = make_unexpected_token_message(tokenizer); + + retval = new_syntax_error_expression( + /* column: */ tokenizer->start_index + 1, + /* message: */ message); + + tokenizer_next(tokenizer); + + free_string(message); } free_expression(sub); @@ -1386,83 +1379,58 @@ struct expression* parse_prefix(struct tokenizer* tokenizer) { struct expression* retval = NULL; - switch (tokenizer->token) + if ( tokenizer->token == t_emark + || tokenizer->token == t_plus + || tokenizer->token == t_minus) { - case t_emark: + enum token kind = tokenizer->token; + + tokenizer_next(tokenizer); + + struct expression* sub = parse_prefix(tokenizer); + + if (sub->kind == ek_syntax_error) { - tokenizer_next(tokenizer); - - struct expression* sub = parse_prefix(tokenizer); - - if (sub->kind == ek_syntax_error) + retval = inc_expression(sub); + } + else + { + switch (kind) { - retval = sub; + case t_emark: + { + retval = new_unary_expression(ek_logical_not, sub); + + break; + } + + case t_plus: + { + retval = new_unary_expression(ek_positive, sub); + + break; + } + + case t_minus: + { + retval = new_unary_expression(ek_negative, sub); + + break; + } + + default: + { + TODO; + break; + } } - else - { - TODO; - #if 0 - struct expression* retval = - new_logical_not_expression(sub); - - free_expression(sub); - - return retval; - #endif - } - - break; } - case t_plus: - { - tokenizer_next(tokenizer); - - struct expression* sub = parse_prefix(tokenizer); - - if (sub->kind == ek_syntax_error) - { - retval = sub; - } - else - { - TODO; - #if 0 - retval = new_positive_expression(sub); - - free_expression(sub); - #endif - } - - break; - } - - case t_minus: - { - tokenizer_next(tokenizer); - - struct expression* sub = parse_prefix(tokenizer); - - if (sub->kind == ek_syntax_error) - { - retval = inc_expression(sub); - } - else - { - retval = new_negative_expression(sub); - } - - free_expression(sub); - - break; - } - - default: - { - retval = parse_primary(tokenizer); - - break; - } + free_expression(sub); + } + else + { + retval = parse_primary(tokenizer); } assert(retval); @@ -1640,134 +1608,53 @@ struct expression* parse_additive(struct tokenizer* tokenizer) || tokenizer->token == t_plus || tokenizer->token == t_minus)) { - switch (tokenizer->token) + enum token kind = tokenizer->token; + + tokenizer_next(tokenizer); + + struct expression* right = parse_multiplicative(tokenizer); + + if (right->kind == ek_syntax_error) { - case t_plus: + free_expression(left); + + left = inc_expression(right); + } + else + { + struct expression* new = NULL; + + switch (kind) { - tokenizer_next(tokenizer); - - struct expression* right = parse_multiplicative(tokenizer); - - if (right->kind == ek_syntax_error) + case t_plus: { - free_expression(left); + new = new_binary_expression(ek_add, left, right); - left = right; - } - else - { - struct expression* retval = - new_binary_expression(ek_add, left, right); - - free_expression(left); - free_expression(right); - - left = retval; + break; } - break; - } + case t_minus: + { + new = new_binary_expression(ek_subtract, left, right); - case t_minus: - { - tokenizer_next(tokenizer); + break; + } - struct expression* right = parse_multiplicative(tokenizer); - - if (right->kind == ek_syntax_error) + default: { TODO; + break; } - else - { - struct expression* retval = - new_binary_expression(ek_subtract, left, right); - - free_expression(left); - - left = retval; - } - - free_expression(right); - break; } - default: - TODO; - break; + assert(new); + + free_expression(left); + + left = new; } - } - return left; -} - -struct expression* parse_shift(struct tokenizer* tokenizer) -{ - struct expression* left = parse_additive(tokenizer); - - while (true - && left->kind != ek_syntax_error - && (false - || tokenizer->token == t_lessthan_lessthan - || tokenizer->token == t_greaterthan_greaterthan)) - { - switch (tokenizer->token) - { - case t_lessthan_lessthan: - { - tokenizer_next(tokenizer); - - struct expression* right = parse_additive(tokenizer); - - if (right->kind == ek_syntax_error) - { - free_expression(left); - - left = right; - } - else - { - struct expression* retval = - new_binary_expression(ek_leftbitshift, left, right); - - free_expression(left); - free_expression(right); - - left = retval; - } - - break; - } - - case t_greaterthan_greaterthan: - { - tokenizer_next(tokenizer); - - struct expression* right = parse_additive(tokenizer); - - if (right->kind == ek_syntax_error) - { - TODO; - } - else - { - struct expression* retval = - new_binary_expression(ek_rightbitshift, left, right); - - free_expression(left); - - left = retval; - } - - free_expression(right); - - break; - } - - default: - TODO; - break; - } + free_expression(right); } return left; @@ -1775,7 +1662,7 @@ struct expression* parse_shift(struct tokenizer* tokenizer) struct expression* parse_comparision(struct tokenizer* tokenizer) { - struct expression* left = parse_shift(tokenizer); + struct expression* left = parse_additive(tokenizer); while (true && left->kind != ek_syntax_error @@ -1785,107 +1672,67 @@ struct expression* parse_comparision(struct tokenizer* tokenizer) || tokenizer->token == t_greaterthan || tokenizer->token == t_greaterthan_equals)) { - switch (tokenizer->token) + enum token kind = tokenizer->token; + + tokenizer_next(tokenizer); + + struct expression* right = parse_additive(tokenizer); + + if (right->kind == ek_syntax_error) { - case t_lessthan: - { - tokenizer_next(tokenizer); + free_expression(left); - struct expression* right = parse_shift(tokenizer); - - if (right->kind == ek_syntax_error) - { - free_expression(left); - - left = inc_expression(right); - } - else - { - struct expression* retval = - new_binary_expression(ek_less_than, left, right); - - free_expression(left); - - left = retval; - } - - free_expression(right); - - break; - } - - case t_lessthan_equals: - { - tokenizer_next(tokenizer); - - struct expression* right = parse_additive(tokenizer); - - if (right->kind == ek_syntax_error) - { - free_expression(left); - - left = inc_expression(right); - } - else - { - struct expression* retval = - new_binary_expression(ek_less_than_equal_to, left, right); - - free_expression(left); - - left = retval; - } - - free_expression(right); - - break; - } - - case t_greaterthan: - { - TODO; - #if 0 - next_token(); - - struct expression* right = - parse_additive(); - - struct expression* retval = - new_binary_expression(ek_greater_than, left, right); - - free_expression(left); - free_expression(right); - - left = retval; - - goto again; - #endif - } - - case t_greaterthan_equals: - { - TODO; - #if 0 - next_token(); - - struct expression* right = - parse_additive(); - - struct expression* retval = - new_binary_expression(ek_greater_than_equal_to, left, right); - - free_expression(left); - free_expression(right); - - left = retval; - - goto again; - #endif - } - - default: - break; + left = inc_expression(right); } + else + { + struct expression* new = NULL; + + switch (kind) + { + case t_lessthan: + { + new = new_binary_expression(ek_less_than, left, right); + + break; + } + + case t_lessthan_equals: + { + new = new_binary_expression(ek_less_than_equal_to, left, right); + + break; + } + + case t_greaterthan: + { + new = new_binary_expression(ek_greater_than, left, right); + + break; + } + + case t_greaterthan_equals: + { + new = new_binary_expression(ek_greater_than_equal_to, left, right); + + break; + } + + default: + { + TODO; + break; + } + } + + assert(new); + + free_expression(left); + + left = new; + } + + free_expression(right); } return left; @@ -1901,59 +1748,50 @@ struct expression* parse_equality(struct tokenizer* tokenizer) || tokenizer->token == t_equals_equals || tokenizer->token == t_emark_equals)) { - switch (tokenizer->token) + enum token kind = tokenizer->token; + + tokenizer_next(tokenizer); + + struct expression* right = parse_comparision(tokenizer); + + if (right->kind == ek_syntax_error) { - case t_equals_equals: - { - tokenizer_next(tokenizer); + free_expression(left); - struct expression* right = parse_comparision(tokenizer); - - if (right->kind == ek_syntax_error) - { - free_expression(left); - - left = inc_expression(right); - } - else - { - struct expression* retval = - new_binary_expression(ek_equal_to, left, right); - - free_expression(left); - - left = retval; - } - - free_expression(right); - - break; - } - - case t_emark_equals: - { - TODO; - #if 0 - next_token(); - - struct expression* right = - parse_comparision(); - - struct expression* retval = - new_binary_expression(ek_not_equal_to, left, right); - - free_expression(left); - free_expression(right); - - left = retval; - - goto again; - #endif - } - - default: - break; + left = inc_expression(right); } + else + { + struct expression* new = NULL; + + switch (kind) + { + case t_equals_equals: + { + new = new_binary_expression(ek_equal_to, left, right); + + break; + } + + case t_emark_equals: + { + new = new_binary_expression(ek_not_equal_to, left, right); + + break; + } + + default: + break; + } + + assert(new); + + free_expression(left); + + left = new; + } + + free_expression(right); } @@ -1964,9 +1802,21 @@ struct expression* parse_logical_and(struct tokenizer* tokenizer) { struct expression* left = parse_equality(tokenizer); - while (tokenizer->token == t_ampersand_ampersand) + while (true + && left->kind != ek_syntax_error + && tokenizer->token == t_ampersand_ampersand) { - TODO; + tokenizer_next(tokenizer); + + struct expression* right = parse_equality(tokenizer); + + struct expression* retval = + new_binary_expression(ek_logical_and, left, right); + + free_expression(left); + free_expression(right); + + left = retval; } return left; @@ -2061,18 +1911,31 @@ struct expression* parse_assign(struct tokenizer* tokenizer) { struct expression* left = parse_ternary(tokenizer); - if (tokenizer->token == t_equals) + if (true + && left->kind != ek_syntax_error + && tokenizer->token == t_equals) { tokenizer_next(tokenizer); struct expression* right = parse_assign(tokenizer); - struct expression* retval = new_binary_expression(ek_assign, left, right); + struct expression* retval = NULL; + + if (right->kind == ek_syntax_error) + { + TODO; + } + else + { + retval = new_binary_expression(ek_assign, left, right); + } + + assert(retval); free_expression(left); free_expression(right); - return retval; + left = retval; } return left; @@ -2082,13 +1945,26 @@ struct expression* parse_comma(struct tokenizer* tokenizer) { struct expression* left = parse_assign(tokenizer); - while (tokenizer->token == t_comma) + while (true + && left->kind != ek_syntax_error + && tokenizer->token == t_comma) { tokenizer_next(tokenizer); struct expression* right = parse_assign(tokenizer); - struct expression* retval = new_binary_expression(ek_comma, left, right); + struct expression* retval = NULL; + + if (right->kind == ek_syntax_error) + { + retval = inc_expression(right); + } + else + { + retval = new_binary_expression(ek_comma, left, right); + } + + assert(retval); free_expression(left); free_expression(right); @@ -2172,25 +2048,15 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_unionnew_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { - TODO; + retval = inc_value(left); } else if (right->kind == vk_error) { - TODO; + retval = inc_value(right); } else { @@ -2216,31 +2082,18 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO - // new_error_value_from_union - - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { - TODO; + retval = inc_value(left); } else if (right->kind == vk_error) { - TODO; + retval = inc_value(right); } else { - TODO; - #if 0 mpq_t q; mpq_init(q); @@ -2250,7 +2103,6 @@ struct value* evaluate( retval = new_value(q); mpq_clear(q); - #endif } free_value(left); @@ -2266,18 +2118,7 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { @@ -2289,8 +2130,6 @@ struct value* evaluate( } else { - TODO; - #if 0 mpq_t q; mpq_init(q); @@ -2300,7 +2139,6 @@ struct value* evaluate( retval = new_value(q); mpq_clear(q); - #endif } free_value(left), free_value(right); @@ -2315,17 +2153,7 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { @@ -2335,7 +2163,7 @@ struct value* evaluate( { retval = inc_value(right); } - else + else if (mpq_sgn(right->mpq)) { mpq_t q; @@ -2351,121 +2179,10 @@ struct value* evaluate( mpq_clear(q); } - - free_value(left), free_value(right); - - break; - } - - case ek_rightbitshift: - { - struct value* left = evaluate(expression->left, scope); - struct value* right = evaluate(expression->right, scope); - - if (left->kind == vk_error && right->kind == vk_error) - { - retval = new_error_value_from_union(left, right); - } - else if (left->kind == vk_error) - { - retval = inc_value(left); - } - else if (right->kind == vk_error) - { - retval = inc_value(right); - } - else if (mpz_cmp_si(mpq_denref(right->mpq), 1) == 0) - { - if (mpq_sgn(right->mpq) > 0) - { - if (mpz_fits_ulong_p(mpq_numref(right->mpq))) - { - unsigned long r = mpz_get_ui(mpq_numref(right->mpq)); - - mpq_t q; - - mpq_init(q); - - mpq_div_2exp(q, left->mpq, r); - - retval = new_value(q); - - mpq_clear(q); - } - else - { - retval = new_error_value_from_fmt( - "error: cannot right bitshift beyond ULONG_MAX"); - } - } - else - { - retval = new_error_value_from_fmt( - "error: cannot right bitshift by a negative value"); - } - } else { retval = new_error_value_from_fmt( - "error: cannot right bitshift by a fractional value"); - } - - free_value(left), free_value(right); - - break; - } - - case ek_leftbitshift: - { - struct value* left = evaluate(expression->left, scope); - struct value* right = evaluate(expression->right, scope); - - if (left->kind == vk_error && right->kind == vk_error) - { - retval = new_error_value_from_union(left, right); - } - else if (left->kind == vk_error) - { - retval = inc_value(left); - } - else if (right->kind == vk_error) - { - retval = inc_value(right); - } - else if (mpz_cmp_si(mpq_denref(right->mpq), 1) == 0) - { - if (mpq_sgn(right->mpq) > 0) - { - if (mpz_fits_ulong_p(mpq_numref(right->mpq))) - { - unsigned long rshift = mpz_get_ui(mpq_numref(right->mpq)); - - mpq_t q; - - mpq_init(q); - - mpq_mul_2exp(q, left->mpq, rshift); - - retval = new_value(q); - - mpq_clear(q); - } - else - { - retval = new_error_value_from_fmt( - "error: cannot left bitshift beyond ULONG_MAX"); - } - } - else - { - retval = new_error_value_from_fmt( - "error: cannot left bitshift by a negative value"); - } - } - else - { - retval = new_error_value_from_fmt( - "error: cannot left bitshift by fractional value"); + "integer divide by zero"); } free_value(left), free_value(right); @@ -2492,7 +2209,7 @@ struct value* evaluate( } else if (mpz_cmp_si(mpq_denref(right->mpq), 1) == 0) { - if (mpq_sgn(right->mpq) > 0) + if (mpq_sgn(right->mpq) >= 0) { if (mpz_fits_ulong_p(mpq_numref(right->mpq))) { @@ -2548,18 +2265,7 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { @@ -2569,10 +2275,8 @@ struct value* evaluate( { retval = inc_value(right); } - else + else if (mpq_sgn(right->mpq)) { - TODO; - #if 0 mpq_t q; mpq_init(q); @@ -2582,7 +2286,11 @@ struct value* evaluate( retval = new_value(q); mpq_clear(q); - #endif + } + else + { + retval = new_error_value_from_fmt( + "divide by zero"); } free_value(left), free_value(right); @@ -2597,18 +2305,7 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { @@ -2618,7 +2315,7 @@ struct value* evaluate( { retval = inc_value(right); } - else + else if (mpq_sgn(right->mpq)) { mpq_t q; @@ -2640,6 +2337,11 @@ struct value* evaluate( mpq_clear(q); } + else + { + retval = new_error_value_from_fmt( + "remainder divide by zero"); + } free_value(left), free_value(right); @@ -2680,30 +2382,56 @@ struct value* evaluate( case ek_greater_than: { - TODO; - #if 0 struct value* left = evaluate(expression->left, scope); struct value* right = evaluate(expression->right, scope); - retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) > 0); + if (left->kind == vk_error && right->kind == vk_error) + { + retval = new_error_value_from_union(left, right); + } + else if (left->kind == vk_error) + { + retval = inc_value(left); + } + else if (right->kind == vk_error) + { + retval = inc_value(right); + } + else + { + retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) > 0); + } free_value(left), free_value(right); - #endif + break; } case ek_greater_than_equal_to: { - TODO; - #if 0 struct value* left = evaluate(expression->left, scope); struct value* right = evaluate(expression->right, scope); - retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) >= 0); + if (left->kind == vk_error && right->kind == vk_error) + { + retval = new_error_value_from_union(left, right); + } + else if (left->kind == vk_error) + { + retval = inc_value(left); + } + else if (right->kind == vk_error) + { + retval = inc_value(right); + } + else + { + retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) >= 0); + } free_value(left), free_value(right); + break; - #endif } case ek_less_than: @@ -2713,25 +2441,15 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { - TODO; + retval = inc_value(left); } else if (right->kind == vk_error) { - TODO; + retval = inc_value(right); } else { @@ -2749,25 +2467,15 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { - TODO; + retval = inc_value(left); } else if (right->kind == vk_error) { - TODO; + retval = inc_value(right); } else { @@ -2786,25 +2494,15 @@ struct value* evaluate( if (left->kind == vk_error && right->kind == vk_error) { - TODO; - // new_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = new_error_value_from_union(left, right); } else if (left->kind == vk_error) { - TODO; + retval = inc_value(left); } else if (right->kind == vk_error) { - TODO; + retval = inc_value(right); } else { @@ -2818,44 +2516,80 @@ struct value* evaluate( case ek_not_equal_to: { - TODO; - #if 0 struct value* left = evaluate(expression->left, scope); struct value* right = evaluate(expression->right, scope); - retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) != 0); + if (left->kind == vk_error && right->kind == vk_error) + { + retval = new_error_value_from_union(left, right); + } + else if (left->kind == vk_error) + { + retval = inc_value(left); + } + else if (right->kind == vk_error) + { + retval = inc_value(right); + } + else + { + retval = new_value_from_int(mpq_cmp(left->mpq, right->mpq) != 0); + } free_value(left), free_value(right); + break; - #endif } case ek_logical_not: { - TODO; - #if 0 - struct value* sub = evaluate(expression->center, scope); + struct value* sub = evaluate(expression->center, scope); - retval = new_value_from_int(mpq_sgn(sub->mpq) == 0); + if (sub->kind == vk_error) + { + retval = inc_value(sub); + } + else + { + retval = new_value_from_int(mpq_sgn(sub->mpq) == 0); + } free_value(sub); + break; - #endif } case ek_logical_and: { - TODO; - #if 0 struct value* left = evaluate(expression->left, scope); - struct value* right = evaluate(expression->right, scope); - retval = new_value_from_int( - mpq_sgn(left->mpq) != 0 && mpq_sgn(right->mpq) != 0); + if (left->kind == vk_error) + { + retval = inc_value(left); + } + else if (mpq_sgn(left->mpq)) + { + struct value* right = evaluate(expression->right, scope); + + if (right->kind == vk_error) + { + retval = inc_value(right); + } + else + { + retval = new_value_from_int(!!mpq_sgn(right->mpq)); + } + + free_value(right); + } + else + { + retval = new_value_from_int(0); + } + + free_value(left); - free_value(left), free_value(right); break; - #endif } case ek_logical_or: @@ -2863,42 +2597,28 @@ struct value* evaluate( struct value* left = evaluate(expression->left, scope); if (left->kind == vk_error) + { + retval = inc_value(left); + } + else if (mpq_sgn(left->mpq)) + { + retval = new_value_from_int(1); + } + else { struct value* right = evaluate(expression->right, scope); if (right->kind == vk_error) { - TODO; - // new_error_value_from_union - struct stringset* set = new_stringset(); - - stringset_update(set, left->errors); - stringset_update(set, right->errors); - - retval = new_error_value(set); - - free_stringset(set); + retval = inc_value(right); } else { - retval = inc_value(left); + retval = new_value_from_int(!!mpq_sgn(right->mpq)); } free_value(right); } - else - { - TODO; - #if 0 - struct value* right = evaluate(expression->right, scope); - - retval = new_value_from_int( - mpq_sgn(left->mpq) != 0 || mpq_sgn(right->mpq) != 0); - - free_value(left), free_value(right); - break; - #endif - } free_value(left); @@ -2939,20 +2659,8 @@ struct value* evaluate( } else { - TODO; - - struct string* message = new_string_from_fmt( + retval = new_error_value_from_fmt( "error: cannot assign to rvalue-expressions"); - - struct stringset* set = new_stringset(); - - stringset_add(set, message); - - retval = new_error_value(set); - - free_stringset(set); - - free_string(message); } break; @@ -2960,14 +2668,11 @@ struct value* evaluate( case ek_comma: { - TODO; - #if 0 free_value(evaluate(expression->left, scope)); retval = evaluate(expression->right, scope); break; - #endif }; } diff --git a/test.py b/test.py index abdaf1f..e3ec96a 100755 --- a/test.py +++ b/test.py @@ -7,6 +7,7 @@ import argparse import json; class colors: + red = "\033[38;2;200;20;0m"; orange = "\033[38;2;200;150;0m"; yellow = "\033[38;2;200;200;0m"; green = "\033[38;2;0;200;0m"; @@ -18,7 +19,7 @@ def parse_args(): parser.add_argument('-n', '--new', "-t", "--touch") parser.add_argument('-s', '--save') parser.add_argument('-c', '--correct', action='store_true') - parser.add_argument('--delete') + parser.add_argument('-d', '--delete') parser.add_argument('--config', default="tests.json") @@ -73,8 +74,23 @@ def correct_test(database): save_test(input_, database); -def delete_test(args, database): - assert(not "TODO"); +def delete_test(input_, database): + if input_ in database: + line = colors.orange + \ + f"test.py: " + \ + f"deleted test {sl.quote(input_)}" + \ + colors.reset; + + print(line); + + del database[input_]; + else: + line = colors.red + \ + f"test.py: " + \ + f"no test found for {sl.quote(input_)}" + \ + colors.reset; + + print(line); def run_tests(tests): for _, test in sorted(tests.items()): @@ -133,7 +149,7 @@ def main(args): elif (args.correct): correct_test(database); elif (args.delete): - assert(not "TODO"); + delete_test(args.delete, database); else: retval = run_tests(database); diff --git a/tests.json b/tests.json index 51ada5a..219ac32 100644 --- a/tests.json +++ b/tests.json @@ -1,8 +1,13 @@ { + "": { + "exit": 1, + "ftime": 1755570465.533511, + "output": "syntax error!\n\n\u2191\n\u2514 unexpected EOF token\n" + }, " ": { - "exit": 0, - "ftime": 1755473136.3299894, - "output": "???" + "exit": 1, + "ftime": 1755570467.656182, + "output": "syntax error!\n \n \u2191\n \u2514 unexpected EOF token\n" }, "!": { "exit": 1, @@ -15,44 +20,44 @@ "output": "syntax error!\n! ? ! : !\n \u2191\n \u2514 unexpected question mark token\n" }, "!!": { - "exit": 0, - "ftime": 1755473136.3299901, - "output": "???" + "exit": 1, + "ftime": 1755570443.7262852, + "output": "syntax error!\n!!\n \u2191\n \u2514 unexpected EOF token\n" }, "!0": { "exit": 0, - "ftime": 1755473136.3299901, - "output": "???" + "ftime": 1755562257.4041865, + "output": "1 \n" }, "!1": { "exit": 0, - "ftime": 1755473136.3299904, - "output": "???" + "ftime": 1755562251.9156868, + "output": "0\n" }, "!7": { "exit": 0, - "ftime": 1755473136.3299904, - "output": "???" + "ftime": 1755570438.7811491, + "output": "0\n" }, "!=": { - "exit": 0, - "ftime": 1755473136.3299904, - "output": "???" + "exit": 1, + "ftime": 1755570441.2534919, + "output": "syntax error!\n!=\n\u2191\n\u2514 unexpected not-equal-to token\n" }, "!@": { "exit": 1, - "ftime": 1755472269.8538663, + "ftime": 1755561357.1989076, "output": "syntax error!\n!@\n \u2191\n \u2514 unknown token '@'\n" }, "!x": { "exit": 0, - "ftime": 1755473136.3299906, - "output": "???" + "ftime": 1755570436.2528877, + "output": "error: use of undefined variable 'x'!\n" }, "!~1": { - "exit": 0, - "ftime": 1755488048.898679, - "output": "???" + "exit": 1, + "ftime": 1755568117.2562263, + "output": "syntax error!\n!~1\n \u2191\n \u2514 unknown token '~'\n" }, "%": { "exit": 1, @@ -60,19 +65,19 @@ "output": "syntax error!\n%\n\u2191\n\u2514 unexpected percent token\n" }, "& $ !": { - "exit": 0, - "ftime": 1755476288.629553, - "output": "???" + "exit": 1, + "ftime": 1755568483.730846, + "output": "syntax error!\n& $ !\n\u2191\n\u2514 unknown token '& '\n" }, "&&": { - "exit": 0, - "ftime": 1755473136.3299909, - "output": "???" + "exit": 1, + "ftime": 1755570408.109909, + "output": "syntax error!\n&&\n\u2191\n\u2514 unexpected logical-and token\n" }, "&1": { - "exit": 0, - "ftime": 1755473136.3299909, - "output": "???" + "exit": 1, + "ftime": 1755570411.3819938, + "output": "syntax error!\n&1\n\u2191\n\u2514 unknown token '&1'\n" }, "(": { "exit": 1, @@ -80,59 +85,59 @@ "output": "syntax error!\n(\n \u2191\n \u2514 unexpected EOF token\n" }, "((x": { - "exit": 0, - "ftime": 1755473136.3299909, - "output": "???" + "exit": 1, + "ftime": 1755570418.7118096, + "output": "syntax error!\n((x\n \u2191\n \u2514 unexpected EOF token\n" }, "((x = 1, 0) && (x = 2, 1)), x": { "exit": 0, - "ftime": 1755473136.329991, - "output": "???" + "ftime": 1755570393.3025537, + "output": "1 \n" }, "((x = 1, 0) || (x = 2, 1)), x": { "exit": 0, - "ftime": 1755473136.329991, - "output": "???" + "ftime": 1755570398.453907, + "output": "2 \n" }, "((x = 1, 1) && (x = 2, 1)), x": { "exit": 0, - "ftime": 1755473136.329991, - "output": "???" + "ftime": 1755570405.6788423, + "output": "2 \n" }, "((x = 1, 1) || (x = 2, 1)), x": { "exit": 0, - "ftime": 1755473136.3299913, - "output": "???" + "ftime": 1755570377.9668455, + "output": "1 \n" }, "()": { - "exit": 0, - "ftime": 1755473136.3299913, - "output": "???" + "exit": 1, + "ftime": 1755570380.4453027, + "output": "syntax error!\n()\n \u2191\n \u2514 unexpected close parentheses token\n" }, "()+": { - "exit": 0, - "ftime": 1755473136.3299913, - "output": "???" + "exit": 1, + "ftime": 1755570382.8541567, + "output": "syntax error!\n()+\n \u2191\n \u2514 unexpected close parentheses token\n" }, "(1": { - "exit": 0, - "ftime": 1755473136.3299913, - "output": "???" + "exit": 1, + "ftime": 1755570385.7815366, + "output": "syntax error!\n(1\n \u2191\n \u2514 unexpected EOF token\n" }, "(1 + 2) * 3": { "exit": 0, - "ftime": 1755473136.3299916, - "output": "???" + "ftime": 1755570334.5242145, + "output": "9 \n" }, "(1 @": { - "exit": 0, - "ftime": 1755473136.3299916, - "output": "???" + "exit": 1, + "ftime": 1755570366.9972131, + "output": "syntax error!\n(1 @\n \u2191\n \u2514 unexpected unknown token '@'\n" }, "(1)": { "exit": 0, - "ftime": 1755473136.3299916, - "output": "???" + "ftime": 1755570370.141912, + "output": "1 \n" }, "(:": { "exit": 1, @@ -140,9 +145,9 @@ "output": "syntax error!\n(:\n \u2191\n \u2514 unexpected colon token\n" }, "(x": { - "exit": 0, - "ftime": 1755473136.3299916, - "output": "???" + "exit": 1, + "ftime": 1755570372.74205, + "output": "syntax error!\n(x\n \u2191\n \u2514 unexpected EOF token\n" }, ")": { "exit": 1, @@ -165,19 +170,39 @@ "output": "syntax error!\n+\n \u2191\n \u2514 unexpected EOF token\n" }, "+(": { - "exit": 0, - "ftime": 1755473136.3299923, - "output": "???" + "exit": 1, + "ftime": 1755570324.7007818, + "output": "syntax error!\n+(\n \u2191\n \u2514 unexpected EOF token\n" }, "+()": { + "exit": 1, + "ftime": 1755570327.1491728, + "output": "syntax error!\n+()\n \u2191\n \u2514 unexpected close parentheses token\n" + }, + "+(+1)": { "exit": 0, - "ftime": 1755473136.3299923, - "output": "???" + "ftime": 1755562135.8728306, + "output": "1 \n" + }, + "+(-(-1))": { + "exit": 0, + "ftime": 1755562133.0358293, + "output": "1 \n" + }, + "+(-1)": { + "exit": 0, + "ftime": 1755562128.2221787, + "output": "-1 \n" + }, + "+0": { + "exit": 0, + "ftime": 1755562120.6025288, + "output": "0\n" }, "+1": { "exit": 0, - "ftime": 1755473136.3299923, - "output": "???" + "ftime": 1755562142.4908085, + "output": "1 \n" }, "+@": { "exit": 1, @@ -186,23 +211,28 @@ }, "+x": { "exit": 0, - "ftime": 1755473136.3299923, - "output": "???" + "ftime": 1755570330.5251958, + "output": "error: use of undefined variable 'x'!\n" }, ",": { - "exit": 0, - "ftime": 1755473136.3299925, - "output": "???" + "exit": 1, + "ftime": 1755570321.8302011, + "output": "syntax error!\n,\n\u2191\n\u2514 unexpected comma token\n" }, "-": { "exit": 1, "ftime": 1755472282.3418233, "output": "syntax error!\n-\n \u2191\n \u2514 unexpected EOF token\n" }, + "-0": { + "exit": 0, + "ftime": 1755562075.2591796, + "output": "0\n" + }, "-1": { "exit": 0, - "ftime": 1755473136.3299925, - "output": "???" + "ftime": 1755562140.2048728, + "output": "-1 \n" }, "-1 // 2": { "exit": 0, @@ -249,10 +279,20 @@ "ftime": 1755472149.663119, "output": "syntax error!\n-@\n \u2191\n \u2514 unknown token '@'\n" }, + ".": { + "exit": 1, + "ftime": 1755570309.6210766, + "output": "syntax error!\n.\n\u2191\n\u2514 unknown token '.'\n" + }, + ".1": { + "exit": 0, + "ftime": 1755570305.8452609, + "output": "\u00b9/\u2081\u2080\n" + }, ".5": { "exit": 0, - "ftime": 1755473136.3299928, - "output": "???" + "ftime": 1755570240.7566268, + "output": "\u00b9/\u2082\n" }, "/": { "exit": 1, @@ -261,8 +301,13 @@ }, "0": { "exit": 0, - "ftime": 1755473136.3299928, - "output": "???" + "ftime": 1755570317.941767, + "output": "0\n" + }, + "0 % 0": { + "exit": 0, + "ftime": 1755568889.6442444, + "output": "remainder divide by zero\n" }, "0 % 2": { "exit": 0, @@ -271,18 +316,43 @@ }, "0 && 0": { "exit": 0, - "ftime": 1755473136.329993, - "output": "???" + "ftime": 1755570173.3261843, + "output": "0\n" }, "0 && 1": { "exit": 0, - "ftime": 1755473136.329993, - "output": "???" + "ftime": 1755570176.5969257, + "output": "0\n" }, "0 && x": { "exit": 0, - "ftime": 1755473136.329993, - "output": "???" + "ftime": 1755570179.2047415, + "output": "0\n" + }, + "0 && y": { + "exit": 0, + "ftime": 1755567991.3860817, + "output": "0\n" + }, + "0 ** 0": { + "exit": 0, + "ftime": 1755568743.0922885, + "output": "1 \n" + }, + "0 ** 1": { + "exit": 0, + "ftime": 1755568740.3265917, + "output": "0\n" + }, + "0 / 0": { + "exit": 0, + "ftime": 1755568885.1886072, + "output": "divide by zero\n" + }, + "0 // 0": { + "exit": 0, + "ftime": 1755568887.1004734, + "output": "integer divide by zero\n" }, "0 ? 0 : 0": { "exit": 0, @@ -291,48 +361,53 @@ }, "0 ? 1 : 2": { "exit": 0, - "ftime": 1755473136.329993, - "output": "???" + "ftime": 1755570182.2458131, + "output": "2 \n" }, "0 ? 1 : z": { "exit": 0, - "ftime": 1755473136.3299932, - "output": "???" + "ftime": 1755570156.3111558, + "output": "error: use of undefined variable 'z'!\n" }, "0 ? x : y = 1": { "exit": 0, - "ftime": 1755476288.6295545, - "output": "???" + "ftime": 1755568479.5800548, + "output": "error: cannot assign to rvalue-expressions\n" }, "0 ? y : 2": { "exit": 0, - "ftime": 1755473136.3299932, - "output": "???" + "ftime": 1755570160.5873857, + "output": "2 \n" }, "0 ? y : z": { "exit": 0, - "ftime": 1755473136.3299932, - "output": "???" + "ftime": 1755570163.7235713, + "output": "error: use of undefined variable 'z'!\n" }, "0 || 0": { "exit": 0, - "ftime": 1755473136.3299932, - "output": "???" + "ftime": 1755570167.0605476, + "output": "0\n" }, "0 || 1": { "exit": 0, - "ftime": 1755473136.3299935, - "output": "???" + "ftime": 1755570126.886756, + "output": "1 \n" + }, + "0 || 3": { + "exit": 0, + "ftime": 1755567781.0723803, + "output": "1 \n" }, "0 || x": { "exit": 0, - "ftime": 1755473136.3299935, - "output": "???" + "ftime": 1755570145.2583308, + "output": "error: use of undefined variable 'x'!\n" }, "0)": { - "exit": 0, - "ftime": 1755473136.3299935, - "output": "???" + "exit": 1, + "ftime": 1755570148.4369347, + "output": "syntax error!\n0)\n \u2191\n \u2514 unexpected close parentheses token\n" }, "0.1": { "exit": 0, @@ -346,43 +421,43 @@ }, "0_": { "exit": 0, - "ftime": 1755473136.3299935, - "output": "???" + "ftime": 1755570151.5659115, + "output": "0\n" }, "0_1": { "exit": 0, - "ftime": 1755473136.3299937, - "output": "???" + "ftime": 1755570112.9896061, + "output": "1 \n" }, "0_1.2_3": { "exit": 0, - "ftime": 1755473136.3299937, - "output": "???" + "ftime": 1755570116.854553, + "output": "1 \u00b2\u00b3/\u2081\u2080\u2080\n" }, "0____": { "exit": 0, - "ftime": 1755473136.3299937, - "output": "???" + "ftime": 1755570119.451222, + "output": "0\n" }, "0_b": { - "exit": 0, - "ftime": 1755473136.3299937, - "output": "???" + "exit": 1, + "ftime": 1755570123.1974983, + "output": "syntax error!\n0_b\n\u2191\n\u2514 unknown token '0_b'\n" }, "0_x": { - "exit": 0, - "ftime": 1755473136.329994, - "output": "???" + "exit": 1, + "ftime": 1755570095.7953963, + "output": "syntax error!\n0_x\n\u2191\n\u2514 unknown token '0_x'\n" }, "0b0_": { "exit": 0, - "ftime": 1755473136.329994, - "output": "???" + "ftime": 1755570101.1145003, + "output": "0\n" }, "0b0_1.0_1": { "exit": 0, - "ftime": 1755473136.329994, - "output": "???" + "ftime": 1755570106.460154, + "output": "1 \u00b9/\u2084\n" }, "0b10": { "exit": 0, @@ -391,23 +466,23 @@ }, "0b101010": { "exit": 0, - "ftime": 1755473136.329994, - "output": "???" + "ftime": 1755570111.0521355, + "output": "42 \n" }, "0b_": { "exit": 0, - "ftime": 1755473136.3299942, - "output": "???" + "ftime": 1755570073.4428928, + "output": "0\n" }, "0b_1001_0110": { "exit": 0, - "ftime": 1755473136.3299942, - "output": "???" + "ftime": 1755570076.0196342, + "output": "150 \n" }, "0o775": { - "exit": 0, - "ftime": 1755473136.3299942, - "output": "???" + "exit": 1, + "ftime": 1755570083.9405794, + "output": "syntax error!\n0o775\n \u2191\n \u2514 unexpected identifier token\n" }, "0x0": { "exit": 0, @@ -416,8 +491,8 @@ }, "0x0_": { "exit": 0, - "ftime": 1755473136.3299942, - "output": "???" + "ftime": 1755570086.3799772, + "output": "0\n" }, "0x1": { "exit": 0, @@ -451,23 +526,23 @@ }, "0xDEAD": { "exit": 0, - "ftime": 1755473136.3299944, - "output": "???" + "ftime": 1755570040.8915925, + "output": "57005 \n" }, "0xDEAD.BEEF": { "exit": 0, - "ftime": 1755473136.3299944, - "output": "???" + "ftime": 1755570049.5162158, + "output": "57005 \u2074\u2078\u2078\u2077\u2079/\u2086\u2085\u2085\u2083\u2086\n" }, "0x_": { "exit": 0, - "ftime": 1755473136.3299944, - "output": "???" + "ftime": 1755570067.572174, + "output": "0\n" }, "0x_DEAD_BEEF": { "exit": 0, - "ftime": 1755473136.3299944, - "output": "???" + "ftime": 1755570070.701697, + "output": "3735928559 \n" }, "0xa": { "exit": 0, @@ -489,15 +564,15 @@ "ftime": 1755473274.803795, "output": "1 \n" }, - "1\n1 ? 2\n1 ? 2 ?\n(1)\n(1\n(1 @\n1)\n(1 + 2) * 3\n()\n()+\n+()\n+(\n: + :\n1 ? 2 %\n1 ? 2 :\n1 ? 2 : :\n!!\n?\n:\n1 : 2\n1.5\n.5\n1 + 2\n1 / 3\nx = 3\nx = 1 / 3\n2 / 4\n2000000 / 4000000\n+\n-\n*\n/\n(\n)\n2 ** 3\n2 << 3\n2.5 << 3\n2.0 << 3.5\n2 >> 3\n2 >> 3.5\n0_1\n0_1.2_3\n0b0_1.0_1\n0xDEAD.BEEF\n1_2_3\n0\n0_\n0____\n_0\n_1\n_123\n_____0\n0b_\n0x_\n0_b\n0_x\n0b0_\n0x0_\n0b_1001_0110\n0x_DEAD_BEEF\n?\n:\n,\n||\n&&\n!\n!=\n>\n>=\n<\n<=\n==\n0xDEAD\n0b101010\n0o775\n1a2\n+x\n-x\n!x\n!x\n!x\nx - x\nx - y\nx + y\nx - y\nx * y\nx / y\nx % y\nx == y\nx > y\nx >= y\nx < y\nx <= y\nx != y\nx || y\nx && y\nx - 1\n1 - x\nx + 3\n3 + x\nx - 3\n3 - x\nx * 3\n3 * x\nx / 3\nx % 3\n3 / x\n3 % x\n%\n5 % 3\n5.5 % 3.5\nx @ y\nx == 2\n3 == x\nx > 2\n2 > x\nx >= 2\n2 >= x\nx < 2\n2 < x\nx <= 2\n2 <= x\nx != 2\n2 != x\nx ? y : z\nx ? y : 0\nx ? 0 : z\nx ? 0 : 0\n1 ? y : z\n1 ? 1 : z\n1 ? y : 2\n1 ? 1 : 2\n0 ? y : z\n0 ? 1 : z\n0 ? y : 2\n0 ? 1 : 2\nx || 0\nx || 1\n0 || x\n1 || x\nx && 0\nx && 1\n0 && x\n1 && x\n+1\n-1\n!0\n!1\n!7\n1 - 1\n2 + 3\n2 - 3\n3 - 2\n2 * 3\n2 / 3\n3 / 2\n3 == 2\n3 > 2\n3 >= 2\n3 < 2\n3 <= 2\n3 != 2\n0 || 0\n1 || 0\n0 || 1\n1 || 1\n0 && 0\n1 && 0\n0 && 1\n1 && 1\n((x = 1, 0) || (x = 2, 1)), x\n((x = 1, 1) || (x = 2, 1)), x\n((x = 1, 0) && (x = 2, 1)), x\n((x = 1, 1) && (x = 2, 1)), x\nx\nx = 3, x\na.b\na123\n123a\n1 2 3\n1.2.3\n()\n(1\n|1\n&1\n": { - "exit": 0, - "ftime": 1755473136.3299947, - "output": "???" - }, "1 != 1 = 1": { "exit": 0, - "ftime": 1755476288.6295552, - "output": "???" + "ftime": 1755568466.6754937, + "output": "error: cannot assign to rvalue-expressions\n" + }, + "1 % 0": { + "exit": 0, + "ftime": 1755568881.6850033, + "output": "remainder divide by zero\n" }, "1 % 1 = 1": { "exit": 0, @@ -520,34 +595,34 @@ "output": "error: use of undefined variable 'x'!\n" }, "1 & 2": { - "exit": 0, - "ftime": 1755477480.7324793, - "output": "???" + "exit": 1, + "ftime": 1755568393.6757336, + "output": "syntax error!\n1 & 2\n \u2191\n \u2514 unexpected unknown token '& '\n" }, "1 & y": { - "exit": 0, - "ftime": 1755477480.7324796, - "output": "???" + "exit": 1, + "ftime": 1755568391.748134, + "output": "syntax error!\n1 & y\n \u2191\n \u2514 unexpected unknown token '& '\n" }, "1 && 0": { "exit": 0, - "ftime": 1755473136.3299947, - "output": "???" + "ftime": 1755570035.9631639, + "output": "0\n" }, "1 && 0 = 1": { "exit": 0, - "ftime": 1755477402.8990865, - "output": "???" + "ftime": 1755568430.875486, + "output": "error: cannot assign to rvalue-expressions\n" }, "1 && 1": { "exit": 0, - "ftime": 1755473136.3299947, - "output": "???" + "ftime": 1755570038.0861595, + "output": "1 \n" }, "1 && x": { "exit": 0, - "ftime": 1755473136.329995, - "output": "???" + "ftime": 1755569969.1386967, + "output": "error: use of undefined variable 'x'!\n" }, "1 * 1 = 1": { "exit": 0, @@ -564,6 +639,16 @@ "ftime": 1755477750.310719, "output": "error: use of undefined variable 'x'!\n" }, + "1 ** 0": { + "exit": 0, + "ftime": 1755568735.060389, + "output": "1 \n" + }, + "1 ** 1": { + "exit": 0, + "ftime": 1755568737.3890376, + "output": "1 \n" + }, "1 + 1 + 1 == 3": { "exit": 0, "ftime": 1755476845.825342, @@ -571,7 +656,7 @@ }, "1 + 1 = 1": { "exit": 0, - "ftime": 1755477318.4355304, + "ftime": 1755568431.0960212, "output": "error: cannot assign to rvalue-expressions\n" }, "1 + 2": { @@ -586,8 +671,8 @@ }, "1 - 1": { "exit": 0, - "ftime": 1755473136.329995, - "output": "???" + "ftime": 1755569976.5786297, + "output": "0\n" }, "1 - 1 = 1": { "exit": 0, @@ -596,8 +681,13 @@ }, "1 - x": { "exit": 0, - "ftime": 1755473136.3299952, - "output": "???" + "ftime": 1755569957.507827, + "output": "error: use of undefined variable 'x'!\n" + }, + "1 / 0": { + "exit": 0, + "ftime": 1755568805.1642942, + "output": "divide by zero\n" }, "1 / 1 = 1": { "exit": 0, @@ -606,8 +696,8 @@ }, "1 / 3": { "exit": 0, - "ftime": 1755473136.3299952, - "output": "???" + "ftime": 1755569959.8013082, + "output": "\u00b9/\u2083\n" }, "1 / @": { "exit": 1, @@ -619,6 +709,11 @@ "ftime": 1755478911.7502086, "output": "error: use of undefined variable 'x'!\n" }, + "1 // 0": { + "exit": 0, + "ftime": 1755568803.2603655, + "output": "integer divide by zero\n" + }, "1 // 2": { "exit": 0, "ftime": 1755478677.919678, @@ -630,34 +725,34 @@ "output": "error: use of undefined variable 'y'!\n" }, "1 2 3": { - "exit": 0, - "ftime": 1755473136.3299952, - "output": "???" + "exit": 1, + "ftime": 1755569962.4989061, + "output": "syntax error!\n1 2 3\n \u2191\n \u2514 unexpected literal token\n" }, "1 : 2": { - "exit": 0, - "ftime": 1755473136.3299952, - "output": "???" + "exit": 1, + "ftime": 1755569964.6912265, + "output": "syntax error!\n1 : 2\n \u2191\n \u2514 unexpected colon token\n" }, "1 << (1 << 1000)": { - "exit": 0, - "ftime": 1755486714.9098544, - "output": "error: cannot left bitshift beyond ULONG_MAX\n" + "exit": 1, + "ftime": 1755568144.6100826, + "output": "syntax error!\n1 << (1 << 1000)\n \u2191\n \u2514 unexpected less-than token\n" }, "1 << (1 >> 1000)": { - "exit": 0, - "ftime": 1755486708.6879425, - "output": "error: cannot left bitshift by fractional value\n" + "exit": 1, + "ftime": 1755568146.209755, + "output": "syntax error!\n1 << (1 >> 1000)\n \u2191\n \u2514 unexpected less-than token\n" }, "1 << 1000": { - "exit": 0, - "ftime": 1755485760.1158442, - "output": "10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 \n" + "exit": 1, + "ftime": 1755568185.8038259, + "output": "syntax error!\n1 << 1000\n \u2191\n \u2514 unexpected less-than token\n" }, "1 << 2": { - "exit": 0, - "ftime": 1755486790.4067934, - "output": "4 \n" + "exit": 1, + "ftime": 1755568126.2031245, + "output": "syntax error!\n1 << 2\n \u2191\n \u2514 unexpected less-than token\n" }, "1 = 1": { "exit": 0, @@ -675,19 +770,19 @@ "output": "syntax error!\n1 == @\n \u2191\n \u2514 unknown token '@'\n" }, "1 >> (1 << 1000)": { - "exit": 0, - "ftime": 1755486729.005008, - "output": "error: cannot right bitshift beyond ULONG_MAX\n" + "exit": 1, + "ftime": 1755568141.1235204, + "output": "syntax error!\n1 >> (1 << 1000)\n \u2191\n \u2514 unexpected greater-than token\n" }, "1 >> (1 >> 1000)": { - "exit": 0, - "ftime": 1755486720.1040041, - "output": "error: cannot right bitshift by a fractional value\n" + "exit": 1, + "ftime": 1755568142.7142582, + "output": "syntax error!\n1 >> (1 >> 1000)\n \u2191\n \u2514 unexpected greater-than token\n" }, "1 >> 1000": { - "exit": 0, - "ftime": 1755485742.0840087, - "output": "\u00b9/\u2081\u2080\u2087\u2081\u2085\u2080\u2088\u2086\u2080\u2087\u2081\u2088\u2086\u2082\u2086\u2087\u2083\u2082\u2080\u2089\u2084\u2088\u2084\u2082\u2085\u2080\u2084\u2089\u2080\u2086\u2080\u2080\u2080\u2081\u2088\u2081\u2080\u2085\u2086\u2081\u2084\u2080\u2084\u2088\u2081\u2081\u2087\u2080\u2085\u2085\u2083\u2083\u2086\u2080\u2087\u2084\u2084\u2083\u2087\u2085\u2080\u2083\u2088\u2088\u2083\u2087\u2080\u2083\u2085\u2081\u2080\u2085\u2081\u2081\u2082\u2084\u2089\u2083\u2086\u2081\u2082\u2082\u2084\u2089\u2083\u2081\u2089\u2088\u2083\u2087\u2088\u2088\u2081\u2085\u2086\u2089\u2085\u2088\u2085\u2088\u2081\u2082\u2087\u2085\u2089\u2084\u2086\u2087\u2082\u2089\u2081\u2087\u2085\u2085\u2083\u2081\u2084\u2086\u2088\u2082\u2085\u2081\u2088\u2087\u2081\u2084\u2085\u2082\u2088\u2085\u2086\u2089\u2082\u2083\u2081\u2084\u2080\u2084\u2083\u2085\u2089\u2088\u2084\u2085\u2087\u2087\u2085\u2087\u2084\u2086\u2089\u2088\u2085\u2087\u2084\u2088\u2080\u2083\u2089\u2083\u2084\u2085\u2086\u2087\u2087\u2087\u2084\u2088\u2082\u2084\u2082\u2083\u2080\u2089\u2088\u2085\u2084\u2082\u2081\u2080\u2087\u2084\u2086\u2080\u2085\u2080\u2086\u2082\u2083\u2087\u2081\u2081\u2084\u2081\u2088\u2087\u2087\u2089\u2085\u2084\u2081\u2088\u2082\u2081\u2085\u2083\u2080\u2084\u2086\u2084\u2087\u2084\u2089\u2088\u2083\u2085\u2088\u2081\u2089\u2084\u2081\u2082\u2086\u2087\u2083\u2089\u2088\u2087\u2086\u2087\u2085\u2085\u2089\u2081\u2086\u2085\u2085\u2084\u2083\u2089\u2084\u2086\u2080\u2087\u2087\u2080\u2086\u2082\u2089\u2081\u2084\u2085\u2087\u2081\u2081\u2089\u2086\u2084\u2087\u2087\u2086\u2088\u2086\u2085\u2084\u2082\u2081\u2086\u2087\u2086\u2086\u2080\u2084\u2082\u2089\u2088\u2083\u2081\u2086\u2085\u2082\u2086\u2082\u2084\u2083\u2088\u2086\u2088\u2083\u2087\u2082\u2080\u2085\u2086\u2086\u2088\u2080\u2086\u2089\u2083\u2087\u2086\n" + "exit": 1, + "ftime": 1755568188.9314723, + "output": "syntax error!\n1 >> 1000\n \u2191\n \u2514 unexpected greater-than token\n" }, "1 ? 1 : 1": { "exit": 0, @@ -696,13 +791,13 @@ }, "1 ? 1 : 2": { "exit": 0, - "ftime": 1755473136.3299956, - "output": "???" + "ftime": 1755569935.8429232, + "output": "1 \n" }, "1 ? 1 : z": { "exit": 0, - "ftime": 1755473136.3299956, - "output": "???" + "ftime": 1755569938.2184339, + "output": "1 \n" }, "1 ? 2": { "exit": 1, @@ -710,24 +805,24 @@ "output": "syntax error!\n1 ? 2\n \u2191\n \u2514 unexpected EOF token\n" }, "1 ? 2 %": { - "exit": 0, - "ftime": 1755473136.3299956, - "output": "???" + "exit": 1, + "ftime": 1755569953.6840866, + "output": "syntax error!\n1 ? 2 %\n \u2191\n \u2514 unexpected EOF token\n" }, "1 ? 2 :": { - "exit": 0, - "ftime": 1755473136.3299959, - "output": "???" + "exit": 1, + "ftime": 1755569931.6193838, + "output": "syntax error!\n1 ? 2 :\n \u2191\n \u2514 unexpected EOF token\n" }, "1 ? 2 : !": { - "exit": -6, - "ftime": 1755471477.0334759, - "output": "" + "exit": 1, + "ftime": 1755570487.2467196, + "output": "syntax error!\n1 ? 2 : !\n \u2191\n \u2514 unexpected EOF token\n" }, "1 ? 2 : :": { - "exit": 0, - "ftime": 1755473136.3299959, - "output": "???" + "exit": 1, + "ftime": 1755569933.6668887, + "output": "syntax error!\n1 ? 2 : :\n \u2191\n \u2514 unexpected colon token\n" }, "1 ? 2 ?": { "exit": 1, @@ -746,13 +841,13 @@ }, "1 ? y : 2": { "exit": 0, - "ftime": 1755473136.329996, - "output": "???" + "ftime": 1755569917.5393546, + "output": "error: use of undefined variable 'y'!\n" }, "1 ? y : z": { "exit": 0, - "ftime": 1755473136.329996, - "output": "???" + "ftime": 1755569923.2425215, + "output": "error: use of undefined variable 'y'!\n" }, "1 @ 1 = 1": { "exit": 1, @@ -760,27 +855,29 @@ "output": "syntax error!\n1 @ 1 = 1\n \u2191\n \u2514 unexpected unknown token '@'\n" }, "1 ^ 2": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568108.0733635, + "output": "syntax error!\n1 ^ 2\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "1 ^ y": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568105.426644, + "output": "syntax error!\n1 ^ y\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "1 | 2": { - "exit": 0, - "ftime": 1755477480.7324803, - "output": "???" + "exit": 1, + "ftime": 1755568389.715351, + "output": "syntax error!\n1 | 2\n \u2191\n \u2514 unexpected unknown token '| '\n" }, "1 | y": { - "exit": 0, - "ftime": 1755477480.7324805, - "output": "???" + "exit": 1, + "ftime": 1755568385.6194391, + "output": "syntax error!\n1 | y\n \u2191\n \u2514 unexpected unknown token '| '\n" }, "1 || 0": { "exit": 0, - "ftime": 1755473136.329996, - "output": "???" + "ftime": 1755569925.6189568, + "output": "1 \n" }, "1 || 0 = 1": { "exit": 0, @@ -789,8 +886,8 @@ }, "1 || 1": { "exit": 0, - "ftime": 1755473136.329996, - "output": "???" + "ftime": 1755569928.2908602, + "output": "1 \n" }, "1 || 1 = 1": { "exit": 0, @@ -799,53 +896,63 @@ }, "1 || x": { "exit": 0, - "ftime": 1755473136.3299963, - "output": "???" + "ftime": 1755569913.9299915, + "output": "1 \n" }, "1(": { "exit": 1, - "ftime": 1755471640.146321, - "output": "syntax error!\n1(\n \u2191\n \u2514 unexpected open parentheses token\n" + "ftime": 1755570482.2467897, + "output": "syntax error!\n1(\n \u2191\n \u2514 unexpected open parentheses token\n" }, "1)": { "exit": 1, - "ftime": 1755471650.8578112, - "output": "syntax error!\n1)\n \u2191\n \u2514 unexpected close parentheses token\n" + "ftime": 1755570475.1112752, + "output": "syntax error!\n1)\n \u2191\n \u2514 unexpected close parentheses token\n" }, "1)),": { - "exit": 0, - "ftime": 1755473136.3299978, - "output": "???" + "exit": 1, + "ftime": 1755569896.2820683, + "output": "syntax error!\n1)),\n \u2191\n \u2514 unexpected close parentheses token\n" }, "1,": { + "exit": 1, + "ftime": 1755569898.243432, + "output": "syntax error!\n1,\n \u2191\n \u2514 unexpected EOF token\n" + }, + "1, 2": { "exit": 0, - "ftime": 1755473136.3299978, - "output": "???" + "ftime": 1755564193.1345315, + "output": "2 \n" + }, + "1.": { + "exit": 0, + "ftime": 1755570303.4040573, + "output": "1 \n" }, "1.2.3": { - "exit": 0, - "ftime": 1755473136.3299978, - "output": "???" + "exit": 1, + "ftime": 1755570246.1242442, + "output": "syntax error!\n1.2.3\n \u2191\n \u2514 unexpected literal token\n" }, "1.5": { "exit": 0, - "ftime": 1755473136.329998, - "output": "???" + "ftime": 1755569862.0755053, + "output": "1 \u00b9/\u2082\n" }, "123a": { - "exit": 0, - "ftime": 1755473136.329998, - "output": "???" + "exit": 1, + "ftime": 1755569885.156464, + "output": "syntax error!\n123a\n\u2191\n\u2514 unknown token '123a'\n" }, "1_2_3": { "exit": 0, - "ftime": 1755473136.329998, - "output": "???" + "ftime": 1755569888.1800854, + "output": "123 \n" }, "1a2": { - "exit": 0, - "ftime": 1755473136.329998, - "output": "???" + "exit": 1, + "ftime": 1755569893.650014, + "output": "syntax error!\n1a2\n\u2191\n\u2514 unknown token '1a'\n" }, "2": { "exit": 0, @@ -854,18 +961,18 @@ }, "2 != x": { "exit": 0, - "ftime": 1755473136.3299983, - "output": "???" + "ftime": 1755569842.498088, + "output": "error: use of undefined variable 'x'!\n" }, "2 * 3": { "exit": 0, - "ftime": 1755473136.3299983, - "output": "???" + "ftime": 1755569859.6669254, + "output": "6 \n" }, "2 ** (1 << 1000)": { - "exit": 0, - "ftime": 1755486333.8139348, - "output": "error: cannot exponentiate beyond ULONG_MAX\n" + "exit": 1, + "ftime": 1755568177.4182842, + "output": "syntax error!\n2 ** (1 << 1000)\n \u2191\n \u2514 unexpected less-than token\n" }, "2 ** (2 ** 100)": { "exit": 0, @@ -909,98 +1016,123 @@ }, "2 + 3": { "exit": 0, - "ftime": 1755473136.3299985, - "output": "???" + "ftime": 1755569823.2745173, + "output": "5 \n" }, "2 - 3": { "exit": 0, - "ftime": 1755473136.3299985, - "output": "???" + "ftime": 1755569825.508279, + "output": "-1 \n" }, "2 / 3": { "exit": 0, - "ftime": 1755473136.3299985, - "output": "???" + "ftime": 1755569827.7623808, + "output": "\u00b2/\u2083\n" }, "2 / 4": { "exit": 0, - "ftime": 1755473136.3299987, - "output": "???" + "ftime": 1755569788.2515879, + "output": "\u00b9/\u2082\n" }, "2 < x": { "exit": 0, - "ftime": 1755473136.3299987, - "output": "???" + "ftime": 1755569820.5219944, + "output": "error: use of undefined variable 'x'!\n" }, "2 << -3": { - "exit": 0, - "ftime": 1755486786.9927943, - "output": "error: cannot left bitshift by a negative value\n" + "exit": 1, + "ftime": 1755568128.0669255, + "output": "syntax error!\n2 << -3\n \u2191\n \u2514 unexpected less-than token\n" }, "2 << 3": { - "exit": 0, - "ftime": 1755486806.9589288, - "output": "16 \n" + "exit": 1, + "ftime": 1755568122.2343354, + "output": "syntax error!\n2 << 3\n \u2191\n \u2514 unexpected less-than token\n" }, "2 << x": { + "exit": 1, + "ftime": 1755568153.9386828, + "output": "syntax error!\n2 << x\n \u2191\n \u2514 unexpected less-than token\n" + }, + "2 <= 3": { "exit": 0, - "ftime": 1755486587.9814649, - "output": "error: use of undefined variable 'x'!\n" + "ftime": 1755566107.52813, + "output": "1 \n" }, "2 <= x": { "exit": 0, - "ftime": 1755473136.3299992, - "output": "???" + "ftime": 1755569749.6094458, + "output": "error: use of undefined variable 'x'!\n" }, "2 > x": { "exit": 0, - "ftime": 1755473136.3299992, - "output": "???" + "ftime": 1755569763.7381756, + "output": "error: use of undefined variable 'x'!\n" + }, + "2 > >=": { + "exit": 1, + "ftime": 1755564724.330153, + "output": "syntax error!\n2 > >=\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" + }, + "2 >= 3": { + "exit": 0, + "ftime": 1755566104.951979, + "output": "0\n" }, "2 >= x": { "exit": 0, - "ftime": 1755473136.3299992, - "output": "???" - }, - "2 >> -3": { - "exit": 0, - "ftime": 1755486768.3421023, - "output": "error: cannot right bitshift by a negative value\n" - }, - "2 >> 3": { - "exit": 0, - "ftime": 1755486617.9829493, - "output": "\u00b9/\u2084\n" - }, - "2 >> 3.5": { - "exit": 0, - "ftime": 1755473136.3299994, - "output": "???" - }, - "2 >> x": { - "exit": 0, - "ftime": 1755486585.966805, + "ftime": 1755569783.7619905, "output": "error: use of undefined variable 'x'!\n" }, + "2 >> -3": { + "exit": 1, + "ftime": 1755568136.4830797, + "output": "syntax error!\n2 >> -3\n \u2191\n \u2514 unexpected greater-than token\n" + }, + "2 >> 3": { + "exit": 1, + "ftime": 1755568152.059411, + "output": "syntax error!\n2 >> 3\n \u2191\n \u2514 unexpected greater-than token\n" + }, + "2 >> 3.5": { + "exit": 1, + "ftime": 1755569701.1215994, + "output": "syntax error!\n2 >> 3.5\n \u2191\n \u2514 unexpected greater-than token\n" + }, + "2 >> x": { + "exit": 1, + "ftime": 1755568156.1861951, + "output": "syntax error!\n2 >> x\n \u2191\n \u2514 unexpected greater-than token\n" + }, + "2 >>=": { + "exit": 1, + "ftime": 1755564720.689766, + "output": "syntax error!\n2 >>=\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" + }, + "2 >>= 3": { + "exit": 1, + "ftime": 1755564718.664137, + "output": "syntax error!\n2 >>= 3\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" + }, "2)": { - "exit": 0, - "ftime": 1755473136.3299994, - "output": "???" + "exit": 1, + "ftime": 1755569708.8826613, + "output": "syntax error!\n2)\n \u2191\n \u2514 unexpected close parentheses token\n" }, "2,": { - "exit": 0, - "ftime": 1755473136.3299994, - "output": "???" + "exit": 1, + "ftime": 1755569723.377508, + "output": "syntax error!\n2,\n \u2191\n \u2514 unexpected EOF token\n" }, "2.0": { "exit": 0, - "ftime": 1755473136.3299994, - "output": "???" + "ftime": 1755569725.8970704, + "output": "2 \n" }, "2.0 << 3.5": { - "exit": 0, - "ftime": 1755473136.3299997, - "output": "???" + "exit": 1, + "ftime": 1755569695.8755376, + "output": "syntax error!\n2.0 << 3.5\n \u2191\n \u2514 unexpected less-than token\n" }, "2.3a": { "exit": 1, @@ -1028,79 +1160,99 @@ "output": "error: cannot exponentiate by a fraction\n" }, "2.5 << 3": { - "exit": 0, - "ftime": 1755486803.5745416, - "output": "20 \n" + "exit": 1, + "ftime": 1755568124.1867597, + "output": "syntax error!\n2.5 << 3\n \u2191\n \u2514 unexpected less-than token\n" }, "2.5 << 3.1": { - "exit": 0, - "ftime": 1755486699.8884826, - "output": "error: cannot left bitshift by fractional value\n" + "exit": 1, + "ftime": 1755568148.1776342, + "output": "syntax error!\n2.5 << 3.1\n \u2191\n \u2514 unexpected less-than token\n" }, "2.5 >> 3": { - "exit": 0, - "ftime": 1755486623.437168, - "output": "\u2075/\u2081\u2086\n" + "exit": 1, + "ftime": 1755568150.362816, + "output": "syntax error!\n2.5 >> 3\n \u2191\n \u2514 unexpected greater-than token\n" }, "2.5 >> 3.1": { - "exit": 0, - "ftime": 1755486732.0083385, - "output": "error: cannot right bitshift by a fractional value\n" + "exit": 1, + "ftime": 1755568138.378544, + "output": "syntax error!\n2.5 >> 3.1\n \u2191\n \u2514 unexpected greater-than token\n" }, "2000000": { "exit": 0, - "ftime": 1755473136.3299997, - "output": "???" + "ftime": 1755569698.0769413, + "output": "2000000 \n" }, "2000000 / 4000000": { "exit": 0, - "ftime": 1755473136.33, - "output": "???" + "ftime": 1755569683.130205, + "output": "\u00b9/\u2082\n" }, "3": { "exit": 0, - "ftime": 1755473136.33, - "output": "???" + "ftime": 1755569686.0491543, + "output": "3 \n" }, "3 != 2": { "exit": 0, - "ftime": 1755473136.33, - "output": "???" + "ftime": 1755569689.12913, + "output": "1 \n" + }, + "3 != 3": { + "exit": 0, + "ftime": 1755566099.1121316, + "output": "0\n" }, "3 % x": { "exit": 0, - "ftime": 1755473136.33, - "output": "???" + "ftime": 1755569692.137992, + "output": "error: use of undefined variable 'x'!\n" + }, + "3 && 4": { + "exit": 0, + "ftime": 1755568025.4023905, + "output": "1 \n" + }, + "3 && x": { + "exit": 0, + "ftime": 1755567995.9212415, + "output": "error: use of undefined variable 'x'!\n" + }, + "3 && y": { + "exit": 0, + "ftime": 1755567975.8098304, + "output": "error: use of undefined variable 'y'!\n" }, "3 * x": { "exit": 0, - "ftime": 1755473136.3300002, - "output": "???" + "ftime": 1755569633.5055418, + "output": "error: use of undefined variable 'x'!\n" }, "3 + x": { "exit": 0, - "ftime": 1755473136.3300002, - "output": "???" + "ftime": 1755569649.9127338, + "output": "error: use of undefined variable 'x'!\n" }, "3 - 2": { "exit": 0, - "ftime": 1755473136.3300002, - "output": "???" + "ftime": 1755569665.8251047, + "output": "1 \n" }, "3 - x": { "exit": 0, - "ftime": 1755473136.3300002, - "output": "???" + "ftime": 1755569680.6580973, + "output": "error: use of undefined variable 'x'!\n" }, "3 / 2": { "exit": 0, - "ftime": 1755473136.3300004, - "output": "???" + "ftime": 1755569613.050122, + "output": "1 \u00b9/\u2082\n" }, "3 / x": { "exit": 0, - "ftime": 1755473136.3300004, - "output": "???" + "ftime": 1755569615.7206976, + "output": "error: use of undefined variable 'x'!\n" }, "3 // 2": { "exit": 0, @@ -1114,13 +1266,18 @@ }, "3 < 2": { "exit": 0, - "ftime": 1755473136.3300004, - "output": "???" + "ftime": 1755569619.2408981, + "output": "0\n" }, "3 <= 2": { "exit": 0, - "ftime": 1755473136.3300004, - "output": "???" + "ftime": 1755569631.3380523, + "output": "0\n" + }, + "3 <= 3": { + "exit": 0, + "ftime": 1755566092.1588671, + "output": "1 \n" }, "3 == 1 + 1 + 1": { "exit": 0, @@ -1129,38 +1286,88 @@ }, "3 == 2": { "exit": 0, - "ftime": 1755473136.3300006, - "output": "???" + "ftime": 1755569579.9763875, + "output": "0\n" + }, + "3 == 3": { + "exit": 0, + "ftime": 1755566087.0307422, + "output": "1 \n" }, "3 == x": { "exit": 0, - "ftime": 1755473136.3300006, - "output": "???" + "ftime": 1755569607.9076216, + "output": "error: use of undefined variable 'x'!\n" }, "3 > 2": { "exit": 0, - "ftime": 1755473136.3300006, - "output": "???" + "ftime": 1755569610.538443, + "output": "1 \n" + }, + "3 > 3": { + "exit": 0, + "ftime": 1755566110.46409, + "output": "0\n" }, "3 >= 2": { "exit": 0, - "ftime": 1755473136.3300009, - "output": "???" + "ftime": 1755569564.4733899, + "output": "1 \n" + }, + "3 >= 3": { + "exit": 0, + "ftime": 1755566089.3845544, + "output": "1 \n" + }, + "3 || 0": { + "exit": 0, + "ftime": 1755567669.2224665, + "output": "1 \n" + }, + "3 || 4": { + "exit": 0, + "ftime": 1755567655.4475658, + "output": "1 \n" + }, + "3 || x": { + "exit": 0, + "ftime": 1755567789.8660045, + "output": "1 \n" }, "3,": { - "exit": 0, - "ftime": 1755473136.3300009, - "output": "???" + "exit": 1, + "ftime": 1755569569.3301256, + "output": "syntax error!\n3,\n \u2191\n \u2514 unexpected EOF token\n" }, "3.5": { "exit": 0, - "ftime": 1755473136.3300009, - "output": "???" + "ftime": 1755569571.9278169, + "output": "3 \u00b9/\u2082\n" }, "4": { "exit": 0, - "ftime": 1755473136.3300009, - "output": "???" + "ftime": 1755569574.9691484, + "output": "4 \n" + }, + "4 != 3": { + "exit": 0, + "ftime": 1755565993.1506035, + "output": "1 \n" + }, + "4 <= 3": { + "exit": 0, + "ftime": 1755566084.3523817, + "output": "0\n" + }, + "4 == 3": { + "exit": 0, + "ftime": 1755565993.2062533, + "output": "0\n" + }, + "4 >= 3": { + "exit": 0, + "ftime": 1755565536.2614975, + "output": "1 \n" }, "4.5 % 2": { "exit": 0, @@ -1169,48 +1376,83 @@ }, "4000000": { "exit": 0, - "ftime": 1755473136.330001, - "output": "???" + "ftime": 1755569525.6002917, + "output": "4000000 \n" }, "5": { "exit": 0, - "ftime": 1755473136.330001, - "output": "???" + "ftime": 1755569529.013417, + "output": "5 \n" }, "5 % 3": { "exit": 0, - "ftime": 1755473136.330001, - "output": "???" + "ftime": 1755569531.6434112, + "output": "2 \n" + }, + "5, 3 > >=": { + "exit": 1, + "ftime": 1755566763.5737097, + "output": "syntax error!\n5, 3 > >=\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" + }, + "5, 3 >>=": { + "exit": 1, + "ftime": 1755566761.139194, + "output": "syntax error!\n5, 3 >>=\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" + }, + "5, x": { + "exit": 0, + "ftime": 1755566235.0983095, + "output": "error: use of undefined variable 'x'!\n" + }, + "5, x = 3": { + "exit": 0, + "ftime": 1755566767.8922217, + "output": "3 \n" + }, + "5, x = 3 > 3": { + "exit": 0, + "ftime": 1755566118.7934046, + "output": "0\n" + }, + "5, x > 3": { + "exit": 0, + "ftime": 1755566238.0419407, + "output": "error: use of undefined variable 'x'!\n" + }, + "5, x >>= 3": { + "exit": 1, + "ftime": 1755566767.8346865, + "output": "syntax error!\n5, x >>= 3\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" }, "5.5": { "exit": 0, - "ftime": 1755473136.330001, - "output": "???" + "ftime": 1755569534.7131126, + "output": "5 \u00b9/\u2082\n" }, "5.5 % 3.5": { "exit": 0, - "ftime": 1755473136.3300014, - "output": "???" + "ftime": 1755569517.8813603, + "output": "2 \n" }, "7 % 0": { "exit": 0, - "ftime": 1755476047.0999649, - "output": "???" + "ftime": 1755568891.606866, + "output": "remainder divide by zero\n" }, "7 % 0.1": { "exit": 0, - "ftime": 1755476047.0999653, - "output": "???" + "ftime": 1755568491.5951643, + "output": "0\n" }, "7 % 1": { "exit": 0, - "ftime": 1755476047.0999653, - "output": "???" + "ftime": 1755568494.4838536, + "output": "0\n" }, "7 % 5": { "exit": 0, - "ftime": 1755476113.2879791, - "output": "???" + "ftime": 1755568487.9330723, + "output": "2 \n" }, "7 % @": { "exit": 1, @@ -1218,46 +1460,49 @@ "output": "syntax error!\n7 % @\n \u2191\n \u2514 unknown token '@'\n" }, "8 & 12": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568097.9295788, + "output": "syntax error!\n8 & 12\n \u2191\n \u2514 unexpected unknown token '& '\n" }, "8 ^ 12": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568101.3304412, + "output": "syntax error!\n8 ^ 12\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "8 | 12": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568103.4006264, + "output": "syntax error!\n8 | 12\n \u2191\n \u2514 unexpected unknown token '| '\n" }, ":": { - "exit": 0, - "ftime": 1755473136.3300014, - "output": "???" + "exit": 1, + "ftime": 1755569519.9782445, + "output": "syntax error!\n:\n\u2191\n\u2514 unexpected colon token\n" }, ": + :": { - "exit": 0, - "ftime": 1755473136.3300014, - "output": "???" + "exit": 1, + "ftime": 1755569522.2495325, + "output": "syntax error!\n: + :\n\u2191\n\u2514 unexpected colon token\n" }, "<": { - "exit": 0, - "ftime": 1755473136.3300016, - "output": "???" + "exit": 1, + "ftime": 1755569508.708146, + "output": "syntax error!\n<\n\u2191\n\u2514 unexpected less-than token\n" }, "<<": { - "exit": 0, - "ftime": 1755473136.3300016, - "output": "???" + "exit": 1, + "ftime": 1755569510.8901222, + "output": "syntax error!\n<<\n\u2191\n\u2514 unexpected less-than token\n" }, "<=": { - "exit": 0, - "ftime": 1755473136.3300016, - "output": "???" + "exit": 1, + "ftime": 1755569512.8898852, + "output": "syntax error!\n<=\n\u2191\n\u2514 unexpected less-than-or-equal-to token\n" }, "=": { - "exit": 0, - "ftime": 1755473136.3300016, - "output": "???" + "exit": 1, + "ftime": 1755565062.1153662, + "output": "syntax error!\n=\n\u2191\n\u2514 unexpected assignment token\n" }, "= ? = : =": { "exit": 1, @@ -1265,84 +1510,89 @@ "output": "syntax error!\n= ? = : =\n\u2191\n\u2514 unexpected assignment token\n" }, "==": { - "exit": 0, - "ftime": 1755473136.3300018, - "output": "???" + "exit": 1, + "ftime": 1755565058.6265152, + "output": "syntax error!\n==\n\u2191\n\u2514 unexpected equal-to token\n" }, ">": { - "exit": 0, - "ftime": 1755473136.3300018, - "output": "???" + "exit": 1, + "ftime": 1755569506.7611783, + "output": "syntax error!\n>\n\u2191\n\u2514 unexpected greater-than token\n" }, ">=": { - "exit": 0, - "ftime": 1755473136.3300018, - "output": "???" + "exit": 1, + "ftime": 1755564936.6737235, + "output": "syntax error!\n>=\n\u2191\n\u2514 unexpected greater-than-or-equal-to token\n" }, ">>": { - "exit": 0, - "ftime": 1755473136.330002, - "output": "???" + "exit": 1, + "ftime": 1755569498.2652988, + "output": "syntax error!\n>>\n\u2191\n\u2514 unexpected greater-than token\n" }, "?": { - "exit": 0, - "ftime": 1755473136.330002, - "output": "???" + "exit": 1, + "ftime": 1755569500.8166804, + "output": "syntax error!\n?\n\u2191\n\u2514 unexpected question mark token\n" }, "@": { - "exit": 0, - "ftime": 1755473136.330002, - "output": "???" + "exit": 1, + "ftime": 1755569503.5292203, + "output": "syntax error!\n@\n\u2191\n\u2514 unknown token '@'\n" }, "@ % 7": { "exit": 1, "ftime": 1755476293.8294644, "output": "syntax error!\n@ % 7\n\u2191\n\u2514 unknown token '@'\n" }, + "@!": { + "exit": 1, + "ftime": 1755561364.8071673, + "output": "syntax error!\n@!\n\u2191\n\u2514 unknown token '@'\n" + }, "_0": { "exit": 0, - "ftime": 1755473136.3300025, - "output": "???" + "ftime": 1755569477.9690945, + "output": "error: use of undefined variable '_0'!\n" }, "_1": { "exit": 0, - "ftime": 1755473136.3300025, - "output": "???" + "ftime": 1755569490.0749164, + "output": "error: use of undefined variable '_1'!\n" }, "_123": { "exit": 0, - "ftime": 1755473136.3300025, - "output": "???" + "ftime": 1755569492.4167905, + "output": "error: use of undefined variable '_123'!\n" }, "_____0": { "exit": 0, - "ftime": 1755473136.3300025, - "output": "???" + "ftime": 1755569494.3201077, + "output": "error: use of undefined variable '_____0'!\n" }, "a.b": { - "exit": 0, - "ftime": 1755473136.3300028, - "output": "???" + "exit": 1, + "ftime": 1755570315.3179033, + "output": "syntax error!\na.b\n \u2191\n \u2514 unexpected unknown token '.b'\n" }, "a123": { "exit": 0, - "ftime": 1755473136.3300028, - "output": "???" + "ftime": 1755569470.207591, + "output": "error: use of undefined variable 'a123'!\n" }, "x": { "exit": 0, - "ftime": 1755473136.3300028, - "output": "???" + "ftime": 1755569472.9691837, + "output": "error: use of undefined variable 'x'!\n" }, "x != 2": { "exit": 0, - "ftime": 1755473136.3300028, - "output": "???" + "ftime": 1755569475.5854502, + "output": "error: use of undefined variable 'x'!\n" }, "x != y": { "exit": 0, - "ftime": 1755473136.330003, - "output": "???" + "ftime": 1755569374.0326622, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x % 1": { "exit": 0, @@ -1351,42 +1601,53 @@ }, "x % 3": { "exit": 0, - "ftime": 1755473136.330003, - "output": "???" + "ftime": 1755569378.8978844, + "output": "error: use of undefined variable 'x'!\n" }, "x % y": { "exit": 0, - "ftime": 1755478840.2607698, + "ftime": 1755568234.4973135, "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x & 2": { - "exit": 0, - "ftime": 1755477480.7324827, - "output": "???" + "exit": 1, + "ftime": 1755568294.8270257, + "output": "syntax error!\nx & 2\n \u2191\n \u2514 unexpected unknown token '& '\n" }, "x & y": { - "exit": 0, - "ftime": 1755477480.7324827, - "output": "???" + "exit": 1, + "ftime": 1755568343.0196848, + "output": "syntax error!\nx & y\n \u2191\n \u2514 unexpected unknown token '& '\n" }, "x && 0": { "exit": 0, - "ftime": 1755473136.330003, - "output": "???" + "ftime": 1755567932.1290414, + "output": "error: use of undefined variable 'x'!\n" }, "x && 1": { "exit": 0, - "ftime": 1755473136.3300033, - "output": "???" + "ftime": 1755569303.6489437, + "output": "error: use of undefined variable 'x'!\n" + }, + "x && 3": { + "exit": 0, + "ftime": 1755567823.2093656, + "output": "error: use of undefined variable 'x'!\n" + }, + "x && 4": { + "exit": 0, + "ftime": 1755567548.4788895, + "output": "error: use of undefined variable 'x'!\n" }, "x && y": { "exit": 0, - "ftime": 1755473136.3300033, - "output": "???" + "ftime": 1755569319.1282122, + "output": "error: use of undefined variable 'x'!\n" }, "x &= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568087.8573108, + "output": "syntax error!\nx &= 3\n \u2191\n \u2514 unexpected unknown token '&='\n" }, "x * 1": { "exit": 0, @@ -1395,13 +1656,13 @@ }, "x * 3": { "exit": 0, - "ftime": 1755473136.3300033, - "output": "???" + "ftime": 1755569331.1927898, + "output": "error: use of undefined variable 'x'!\n" }, "x * y": { "exit": 0, - "ftime": 1755473136.3300035, - "output": "???" + "ftime": 1755569256.7372608, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x ** 2": { "exit": 0, @@ -1415,33 +1676,33 @@ }, "x + 3": { "exit": 0, - "ftime": 1755473136.3300035, - "output": "???" + "ftime": 1755569271.1116626, + "output": "error: use of undefined variable 'x'!\n" }, "x + y": { "exit": 0, - "ftime": 1755473136.3300035, - "output": "???" + "ftime": 1755569299.2236016, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x - 1": { "exit": 0, - "ftime": 1755473136.3300035, - "output": "???" + "ftime": 1755569301.6810646, + "output": "error: use of undefined variable 'x'!\n" }, "x - 3": { "exit": 0, - "ftime": 1755473136.3300037, - "output": "???" + "ftime": 1755569192.0723543, + "output": "error: use of undefined variable 'x'!\n" }, "x - x": { "exit": 0, - "ftime": 1755473136.3300037, - "output": "???" + "ftime": 1755569227.2554224, + "output": "error: use of undefined variable 'x'!\n" }, "x - y": { "exit": 0, - "ftime": 1755473136.3300037, - "output": "???" + "ftime": 1755569237.320787, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x / 1": { "exit": 0, @@ -1450,12 +1711,12 @@ }, "x / 3": { "exit": 0, - "ftime": 1755473136.3300037, - "output": "???" + "ftime": 1755569239.6487458, + "output": "error: use of undefined variable 'x'!\n" }, "x / y": { "exit": 0, - "ftime": 1755478843.2609138, + "ftime": 1755568208.6451025, "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x // 2": { @@ -1465,125 +1726,153 @@ }, "x // y": { "exit": 0, - "ftime": 1755478178.2888138, + "ftime": 1755568250.7135744, "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x < 2": { "exit": 0, - "ftime": 1755473136.330004, - "output": "???" + "ftime": 1755569141.8622398, + "output": "error: use of undefined variable 'x'!\n" }, "x < y": { "exit": 0, - "ftime": 1755473136.330004, - "output": "???" + "ftime": 1755569158.9179573, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x << 2": { - "exit": 0, - "ftime": 1755483969.0134418, - "output": "error: use of undefined variable 'x'!\n" + "exit": 1, + "ftime": 1755568205.6998444, + "output": "syntax error!\nx << 2\n \u2191\n \u2514 unexpected less-than token\n" }, "x << y": { - "exit": 0, - "ftime": 1755486520.6408663, - "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" + "exit": 1, + "ftime": 1755568175.4832873, + "output": "syntax error!\nx << y\n \u2191\n \u2514 unexpected less-than token\n" }, "x <= 2": { "exit": 0, - "ftime": 1755473136.330004, - "output": "???" + "ftime": 1755569174.9496958, + "output": "error: use of undefined variable 'x'!\n" }, "x <= y": { "exit": 0, - "ftime": 1755473136.3300042, - "output": "???" + "ftime": 1755569054.6715014, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x = 1 / 3": { "exit": 0, - "ftime": 1755473136.3300042, - "output": "???" + "ftime": 1755569064.7590215, + "output": "\u00b9/\u2083\n" }, "x = 1, x += 1": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755567304.4139895, + "output": "syntax error!\nx = 1, x += 1\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 2, x *= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566951.8188446, + "output": "syntax error!\nx = 2, x *= 3\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 2, x -= 1": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755567299.2284985, + "output": "syntax error!\nx = 2, x -= 1\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 2, x /= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755567302.3191693, + "output": "syntax error!\nx = 2, x /= 3\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 3": { "exit": 0, "ftime": 1755477108.2987745, "output": "3 \n" }, + "x = 3 > 3": { + "exit": 0, + "ftime": 1755566115.177789, + "output": "0\n" + }, "x = 3, x": { "exit": 0, - "ftime": 1755473136.3300042, - "output": "???" + "ftime": 1755569068.1103356, + "output": "3 \n" + }, + "x = 5": { + "exit": 0, + "ftime": 1755564247.1683495, + "output": "5 \n" }, "x = 5, x %= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566908.7089064, + "output": "syntax error!\nx = 5, x %= 3\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 5, x &= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568089.9540982, + "output": "syntax error!\nx = 5, x &= 3\n \u2191\n \u2514 unexpected unknown token '&='\n" }, "x = 5, x //= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566935.8214655, + "output": "syntax error!\nx = 5, x //= 3\n \u2191\n \u2514 unexpected assignment token\n" }, "x = 5, x <<= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566947.2046003, + "output": "syntax error!\nx = 5, x <<= 3\n \u2191\n \u2514 unexpected less-than-or-equal-to token\n" }, "x = 5, x >>= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566849.0595043, + "output": "syntax error!\nx = 5, x >>= 3\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" }, "x = 5, x ^= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566880.5155108, + "output": "syntax error!\nx = 5, x ^= 3\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "x = 5, x |= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566891.2356899, + "output": "syntax error!\nx = 5, x |= 3\n \u2191\n \u2514 unexpected unknown token '|='\n" }, "x = 8, x |= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566893.6109488, + "output": "syntax error!\nx = 8, x |= 3\n \u2191\n \u2514 unexpected unknown token '|='\n" }, "x = y": { "exit": 0, - "output": "???" + "ftime": 1755563935.397127, + "output": "error: use of undefined variable 'y'!\n" }, "x == 2": { "exit": 0, - "ftime": 1755473136.3300045, - "output": "???" + "ftime": 1755569006.309646, + "output": "error: use of undefined variable 'x'!\n" }, "x == y": { "exit": 0, - "ftime": 1755473136.3300045, - "output": "???" + "ftime": 1755569029.0763607, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x > 2": { "exit": 0, - "ftime": 1755473136.3300045, - "output": "???" + "ftime": 1755569034.181434, + "output": "error: use of undefined variable 'x'!\n" }, "x > y": { "exit": 0, - "ftime": 1755473136.3300045, - "output": "???" + "ftime": 1755569037.0543985, + "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" + }, + "x > 3": { + "exit": 0, + "ftime": 1755566232.3922758, + "output": "error: use of undefined variable 'x'!\n" }, "x > @": { "exit": 1, @@ -1592,38 +1881,43 @@ }, "x > y": { "exit": 0, - "ftime": 1755475885.5324898, + "ftime": 1755568938.459144, "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x >= 2": { "exit": 0, - "ftime": 1755475971.8724043, - "output": "???" + "ftime": 1755568920.6551688, + "output": "error: use of undefined variable 'x'!\n" }, "x >= y": { "exit": 0, - "ftime": 1755475971.7800138, + "ftime": 1755568920.911103, "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" }, "x >> 3": { - "exit": 0, - "ftime": 1755483915.710374, - "output": "error: use of undefined variable 'x'!\n" + "exit": 1, + "ftime": 1755568208.4573557, + "output": "syntax error!\nx >> 3\n \u2191\n \u2514 unexpected greater-than token\n" }, "x >> y": { - "exit": 0, - "ftime": 1755486536.199988, - "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" + "exit": 1, + "ftime": 1755568173.7618992, + "output": "syntax error!\nx >> y\n \u2191\n \u2514 unexpected greater-than token\n" + }, + "x >>= 3": { + "exit": 1, + "ftime": 1755566430.254594, + "output": "syntax error!\nx >>= 3\n \u2191\n \u2514 unexpected greater-than-or-equal-to token\n" }, "x ? 0 : 0": { "exit": 0, - "ftime": 1755473136.3300047, - "output": "???" + "ftime": 1755568961.8211458, + "output": "error: use of undefined variable 'x'!\n" }, "x ? 0 : z": { "exit": 0, - "ftime": 1755473136.3300047, - "output": "???" + "ftime": 1755568964.943296, + "output": "error: use of undefined variable 'x'!\n" }, "x ? y : !": { "exit": 1, @@ -1646,30 +1940,24 @@ "output": "syntax error!\nx @ y\n \u2191\n \u2514 unexpected unknown token '@'\n" }, "x ^ 2": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566882.6361966, + "output": "syntax error!\nx ^ 2\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "x ^ y": { - "exit": 0, - "output": "???" - }, - "x ^= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755566884.9552922, + "output": "syntax error!\nx ^ y\n \u2191\n \u2514 unexpected unknown token '^'\n" }, "x | 2": { - "exit": 0, - "ftime": 1755477480.7324834, - "output": "???" + "exit": 1, + "ftime": 1755568291.1634362, + "output": "syntax error!\nx | 2\n \u2191\n \u2514 unexpected unknown token '| '\n" }, "x | y": { - "exit": 0, - "ftime": 1755477480.7324834, - "output": "???" - }, - "x |= 3": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755568292.8362386, + "output": "syntax error!\nx | y\n \u2191\n \u2514 unexpected unknown token '| '\n" }, "x || 0": { "exit": 0, @@ -1681,10 +1969,15 @@ "ftime": 1755474530.7809658, "output": "error: use of undefined variable 'x'!\n" }, + "x || 4": { + "exit": 0, + "ftime": 1755567339.0139718, + "output": "error: use of undefined variable 'x'!\n" + }, "x || y": { "exit": 0, - "ftime": 1755474294.1468184, - "output": "error: use of undefined variable 'x'!\nerror: use of undefined variable 'y'!\n" + "ftime": 1755568079.7794976, + "output": "error: use of undefined variable 'x'!\n" }, "y": { "exit": 0, @@ -1707,32 +2000,33 @@ "output": "syntax error!\n||\n\u2191\n\u2514 unexpected logical-or token\n" }, "~!1": { - "exit": 0, - "ftime": 1755488048.8986857, - "output": "???" + "exit": 1, + "ftime": 1755568114.0816064, + "output": "syntax error!\n~!1\n\u2191\n\u2514 unknown token '~'\n" }, "~0": { - "exit": 0, - "ftime": 1755477480.7324836, - "output": "???" + "exit": 1, + "ftime": 1755568289.089677, + "output": "syntax error!\n~0\n\u2191\n\u2514 unknown token '~'\n" }, "~0b1010": { - "exit": 0, - "output": "???" + "exit": 1, + "ftime": 1755563921.0041895, + "output": "syntax error!\n~0b1010\n\u2191\n\u2514 unknown token '~'\n" }, "~1": { - "exit": 0, - "ftime": 1755488031.3807857, - "output": "???" + "exit": 1, + "ftime": 1755568119.29042, + "output": "syntax error!\n~1\n\u2191\n\u2514 unknown token '~'\n" }, "~x": { - "exit": 0, - "ftime": 1755477480.7324839, - "output": "???" + "exit": 1, + "ftime": 1755568286.5072727, + "output": "syntax error!\n~x\n\u2191\n\u2514 unknown token '~'\n" }, "~~1": { - "exit": 0, - "ftime": 1755488048.9001203, - "output": "???" + "exit": 1, + "ftime": 1755568111.1684449, + "output": "syntax error!\n~~1\n\u2191\n\u2514 unknown token '~'\n" } } \ No newline at end of file