diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_as_analyzer.c | 5 | ||||
| -rw-r--r-- | tests/test_as_parser.c | 8 | ||||
| -rw-r--r-- | tests/test_as_tokenizer.c | 14 |
3 files changed, 22 insertions, 5 deletions
diff --git a/tests/test_as_analyzer.c b/tests/test_as_analyzer.c index 1b6abbd..993860a 100644 --- a/tests/test_as_analyzer.c +++ b/tests/test_as_analyzer.c @@ -18,12 +18,15 @@ char *input_buffer = "end: eq\n"; int main(int argc, char** argv) { + struct result result; printf("[TEST] assembler analyzer\n"); // make a memory buffer to FILE* FILE *fp = fmemopen(input_buffer, strlen(input_buffer), "r"); struct allocator * alct = new_allocator(); struct token_stream * ts = new_token_stream(alct, fp); - struct prog * prog = parse_prog(alct, ts); + result = parse_prog(alct, ts); + assert(result.errmsg == NULL); + struct prog* prog = result.value; struct sym_table sym_table = analyze_prog(alct, prog); assert(strcmp(sym_table.buf[0].name, "start") == 0); diff --git a/tests/test_as_parser.c b/tests/test_as_parser.c index 01ba413..096031f 100644 --- a/tests/test_as_parser.c +++ b/tests/test_as_parser.c @@ -14,12 +14,18 @@ char *input_buffer = "end: eq\n"; int main(int argc, char** argv) { + struct result result; printf("[TEST] assembler parser\n"); // make a memory buffer to FILE* FILE *fp = fmemopen(input_buffer, strlen(input_buffer), "r"); struct allocator * alct = new_allocator(); struct token_stream * ts = new_token_stream(alct, fp); - struct prog * prog = parse_prog(alct, ts); + result = parse_prog(alct, ts); + if (result.errmsg != NULL) { + printf("error: %s\n", result.errmsg); + } + assert(result.errmsg == NULL); + struct prog* prog = result.value; // compare output struct stmt * * stmts = prog->stmts->stmts; diff --git a/tests/test_as_tokenizer.c b/tests/test_as_tokenizer.c index 7d82099..995c764 100644 --- a/tests/test_as_tokenizer.c +++ b/tests/test_as_tokenizer.c @@ -26,7 +26,8 @@ char *expected_output = "OP: div, line: 4, col: 5\n" "NEWLINE\n" "OP: eq, line: 5, col: 5\n" - "NEWLINE\n"; + "NEWLINE\n" + "ENDOFFILE\n"; int main(int argc, char** argv) { printf("[TEST] assembler tokenizer\n"); @@ -40,8 +41,15 @@ int main(int argc, char** argv) { FILE *out = fmemopen(output_buffer, 10240, "w"); FILE *origin_stdout = stdout; stdout = out; - while (peek_token(alct, ts)->type != TK_ENDOFFILE) { - print_token(peek_token(alct, ts)); + struct token* token; + struct result result; + while (1) { + result = peek_token(alct, ts); + assert(result.errmsg == NULL); + assert(result.value != NULL); + token = result.value; + print_token(token); + if (token->type == TK_ENDOFFILE) break; next_token(alct, ts); } fclose(out); |
