#ifndef SK_TEST_PARSER_H #define SK_TEST_PARSER_H #include #include "node.h" #include static void test_parser(char const* oracle, char const* source) { struct parser parser; parser_init(&parser, source); struct node* node = parser_try_parse(&parser); CU_ASSERT_FATAL(node != NULL); struct str str; str_init(&str); node_str(node, &str); if (strcmp(oracle, str.value) != 0) { fprintf(stderr, "\n%s <> %s\n", oracle, str.value); } CU_ASSERT_STRING_EQUAL_FATAL(oracle, str.value); str_free(&str); node_free(node); free(node); parser_free(&parser); } static void test_parser_int() { test_parser("ROOT(INT[32])", " 32 "); test_parser("ROOT(INT[32],INT[-2],INT[24])", " 32 -2 24"); test_parser("ROOT(ADD(INT[1],MUL(INT[2],INT[3])))", " 1 + 2 * 3 "); test_parser("ROOT(DIV(SUB(INT[1],INT[2]),INT[3]))", " (1 - 2) / 3 "); test_parser("ROOT(USUB(INT[32]))", " -(32) "); } static void test_parser_assert() { test_parser("ROOT(ASSERT_EQ(INT[32],INT[12]))", " assert 32 eq 12 "); } void register_parser() { CU_pSuite suite = CU_add_suite("Parser", 0, 0); CU_add_test(suite, "Integers", test_parser_int); CU_add_test(suite, "Assertions", test_parser_assert); } #endif