sync/test/test_lexer.c

59 lines
1.9 KiB
C

#include <assert.h>
#include <string.h>
#include <stdio.h>
#include "../include/sync/types.h"
#include "../include/sync/lexer.h"
void test_tokenize_simple_assignment(void) {
const char *src = "x = 42;";
Lexer lexer;
lexer_init(&lexer, "<stdin>", src);
TokenResult t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_IDENTIFIER && strncmp(t.result.start, "x", t.result.length) == 0);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_OPERATOR && strncmp(t.result.start, "=", t.result.length) == 0);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_NUMBER && strncmp(t.result.start, "42", t.result.length) == 0);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_SEMICOLON);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_EOF);
}
void test_tokenize_function_call(void) {
const char *src = "print(x);";
Lexer lexer;
lexer_init(&lexer, "<stdin>", src);
TokenResult t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_IDENTIFIER && strncmp(t.result.start, "print", t.result.length) == 0);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_LPAREN);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_IDENTIFIER && strncmp(t.result.start, "x", t.result.length) == 0);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_RPAREN);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_SEMICOLON);
t = lexer_next(&lexer);
assert(t.type == SYNC_RESULT && t.result.type == TOKEN_EOF);
}
int main(void) {
test_tokenize_simple_assignment();
test_tokenize_function_call();
printf("All lexer tests passed.\n");
return 0;
}