scripting: Added tests for int parser
authorLukas Krickl <lukas@krickl.dev>
Mon, 16 Mar 2026 09:53:30 +0000 (10:53 +0100)
committerLukas Krickl <lukas@krickl.dev>
Mon, 16 Mar 2026 09:53:30 +0000 (10:53 +0100)
src/l_lsl.c
src/tests/t_lsl.c

index 5af644dade1bf54ca9cb6c17836d1259ec14f669..f86996149456dc459e90e805ed69070e310edea0 100644 (file)
@@ -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;
 }
 
index bd0636ed29bb349825bc5a20753594fe4524ca78..94d5097249864778889214e95f27e80d8f59aad8 100644 (file)
@@ -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;
 }