71 lines
1.3 KiB
C
71 lines
1.3 KiB
C
#include <criterion/criterion.h>
|
|
#include <vec.h>
|
|
#include <node.h>
|
|
#include <lexer.h>
|
|
|
|
static void test_lexer(char const* source, size_t size, ...)
|
|
{
|
|
va_list lst;
|
|
va_start(lst, size);
|
|
|
|
struct vec tokens;
|
|
vec_init(&tokens, 1);
|
|
|
|
struct lexer lex;
|
|
lexer_init(&lex, source);
|
|
int err = lexer_extract(&lex, &tokens);
|
|
cr_assert_eq(0, err);
|
|
cr_assert_eq(size, tokens.size,
|
|
"size (%zu) != tokens.size (%zu)",
|
|
size, tokens.size);
|
|
|
|
for (size_t i=0; i<size; i++)
|
|
{
|
|
size_t SZ = 256;
|
|
char buf[SZ];
|
|
node_str(tokens.data[i], buf, SZ);
|
|
cr_assert_str_eq(va_arg(lst, char*), buf);
|
|
}
|
|
|
|
va_end(lst);
|
|
|
|
lexer_free(&lex);
|
|
vec_free_elements(&tokens);
|
|
vec_free(&tokens);
|
|
}
|
|
|
|
Test(lexer, builtins) {
|
|
test_lexer("true false;", 3,
|
|
"BOOL[true]",
|
|
"BOOL[false]",
|
|
"SEMICOLON");
|
|
}
|
|
|
|
Test(lexer, error) {
|
|
struct vec tokens;
|
|
vec_init(&tokens, 1);
|
|
|
|
struct lexer lex;
|
|
lexer_init(&lex, " true § false;");
|
|
|
|
int res = lexer_extract(&lex, &tokens);
|
|
cr_assert_neq(0, res);
|
|
|
|
lexer_free(&lex);
|
|
vec_free_elements(&tokens);
|
|
vec_free(&tokens);
|
|
}
|
|
|
|
Test(lexer, assert) {
|
|
test_lexer("assert", 1, "ASSERT");
|
|
}
|
|
|
|
|
|
Test(lexer, comment) {
|
|
test_lexer("assert # salut \n assert", 2, "ASSERT", "ASSERT");
|
|
}
|
|
|
|
Test(lexer, bool_arith) {
|
|
test_lexer("&&||!", 3, "AND", "OR", "NOT");
|
|
}
|