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 */
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);
* on the token type
*/
+
return value;
}
-#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;
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;
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;
}