59 lines
1.3 KiB
C
59 lines
1.3 KiB
C
#ifndef SK_TEST_PARSER_H
|
|
#define SK_TEST_PARSER_H
|
|
|
|
#include <CUnit/CUnit.h>
|
|
#include "node.h"
|
|
#include <parser.h>
|
|
|
|
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
|