From: Lukas Krickl Date: Mon, 16 Mar 2026 09:53:30 +0000 (+0100) Subject: scripting: Added tests for int parser X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=5c2a816eb4295386aea26d2f9633eadae347b70b;p=lrts%2F.git scripting: Added tests for int parser --- diff --git a/src/l_lsl.c b/src/l_lsl.c index 5af644d..f869961 100644 --- a/src/l_lsl.c +++ b/src/l_lsl.c @@ -94,6 +94,8 @@ struct l_lsl_value* l_lsl_next_token(struct l_lsl_vm *v, const char *code, c = l_lsl_lex_advance(v, code); } l_lsl_lex_term_token(tokbuf, token_len); + + value->data.int_val = u_strtol(tokbuf, LRTS_NULL, 10); } else if (c == '0') { value->type = L_LSL_TYPE_INT; /* specific base number */ @@ -101,10 +103,13 @@ struct l_lsl_value* l_lsl_next_token(struct l_lsl_vm *v, const char *code, if (l_lsl_isnum(c)) { /* octal */ + l_lsl_lex_term_token(tokbuf, token_len); } else if (c == 'x') { /* hex */ + l_lsl_lex_term_token(tokbuf, token_len); } else if (c == 'b') { /* bin */ + l_lsl_lex_term_token(tokbuf, token_len); } else { l_lsl_err(v, L_LSL_ERR_INVALID_NUMBER_BASE, "unknown number base: 0%c\n", c); @@ -123,6 +128,7 @@ struct l_lsl_value* l_lsl_next_token(struct l_lsl_vm *v, const char *code, * on the token type */ + return value; } diff --git a/src/tests/t_lsl.c b/src/tests/t_lsl.c index bd0636e..94d5097 100644 --- a/src/tests/t_lsl.c +++ b/src/tests/t_lsl.c @@ -1,11 +1,24 @@ -#define T_LSL_ASSERT(expected_value, expected_err, src_file) \ - if (t_lsl_assert(expected_value, expected_err, src_file)) { \ + +typedef int (*t_lsl_value_assert)(struct l_lsl_value *expected, + struct l_lsl_value *actual); + +int t_lsl_vlue_assert_int(struct l_lsl_value *expected, + struct l_lsl_value *actual) { + T_ASSERT(expected->data.int_val == actual->data.int_val, + ("Unexpected int value. Expected %d got %d\n", expected->data.int_val, + actual->data.int_val)); + + return 0; +} + +#define T_LSL_ASSERT(expected_value, expected_err, src_file, value_assert) \ + if (t_lsl_assert(expected_value, expected_err, src_file, value_assert)) { \ return 1; \ } int t_lsl_assert(struct l_lsl_value expect_value, enum l_lsl_error expect_err, - const char *src_file) { + const char *src_file, t_lsl_value_assert assert_val) { struct l_lsl_vm v = l_lsl_vm_init(); struct l_lsl_value *res = l_lsl_exec(&v, src_file); enum l_lsl_error err = v.err; @@ -15,7 +28,11 @@ int t_lsl_assert(struct l_lsl_value expect_value, enum l_lsl_error expect_err, T_ASSERT(res != LRTS_NULL, ("Invalid result value")) T_ASSERT(err == expect_err, ("Unexpected error code %d\n", err)); T_ASSERT(res->type == expect_value.type, ("Unexpected return value\n")); - + + if (assert_val(&expect_value, res) != 0) { + return 1; + } + l_lsl_value_free(&v, res); return 0; @@ -25,6 +42,8 @@ int t_test_lsl() { struct l_lsl_value v = l_lsl_value_init(); v.type = L_LSL_TYPE_INT; - T_LSL_ASSERT(v, L_LSL_ERR_OK, "./src/tests/lsl/intliteral.lsl"); + v.data.int_val = 123; + T_LSL_ASSERT(v, L_LSL_ERR_OK, "./src/tests/lsl/intliteral.lsl", + t_lsl_vlue_assert_int); return 0; }