diff --git a/nemu/tests/expr_test.c b/nemu/tests/expr_test.c index 1bef171..53159b7 100644 --- a/nemu/tests/expr_test.c +++ b/nemu/tests/expr_test.c @@ -147,6 +147,8 @@ struct { {"-0x1", 0xFFFFFFFFU}, {"0--1", 0x1}, {"0--0x1", 0x1}, +}, reg_exprs[] = { + {"$$0", 0x0}, }; START_TEST(test_expr_negative_operand) { yy_scan_string(exprs[_i].expr); @@ -160,6 +162,18 @@ START_TEST(test_expr_negative_operand) { } END_TEST +START_TEST(test_expr_register) { + yy_scan_string(reg_exprs[_i].expr); + uint32_t value; + ck_assert(!yyparse(&value)); + yylex_destroy(); + + ck_assert_msg(value == reg_exprs[_i].reference, + "\n\texpr = %s\n\t(addr = %u) != (reference = %u)\n", reg_exprs[_i].expr, + value, reg_exprs[_i].reference); +} +END_TEST + Suite *expr_suite(void) { Suite *s; TCase *tc_core; @@ -170,6 +184,8 @@ Suite *expr_suite(void) { tcase_add_loop_test(tc_core, test_expr_random_100, 0, 20); tcase_add_loop_test(tc_core, test_expr_negative_operand, 0, sizeof(exprs) / sizeof(exprs[0])); + tcase_add_loop_test(tc_core, test_expr_register, 0, + sizeof(reg_exprs) / sizeof(reg_exprs[0])); suite_add_tcase(s, tc_core); return s;