diff options
| author | Mistivia <i@mistivia.com> | 2025-03-18 21:32:58 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-03-18 21:32:58 +0800 |
| commit | afb5ae7905c666eb259288ba0d3b47f71a13958f (patch) | |
| tree | 9d754a68179a4b7736f3d02f9a5dd5a910c65841 /tests | |
| parent | c684a4a302e95d860210a9ddaa891adf9775eadc (diff) | |
add parser unit test
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_as_parser.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/test_as_parser.c b/tests/test_as_parser.c new file mode 100644 index 0000000..e11a353 --- /dev/null +++ b/tests/test_as_parser.c @@ -0,0 +1,40 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#include "as_tokenizer.h" +#include "as_parser.h" +#include "utils.h" + +char *inputBuffer = + "start:\n" + " add 1\n" + " sub start\n" + " div\n" + "end: eq\n"; + +int main(int argc, char** argv) { + printf("[TEST] assembler parser\n"); + // make a memory buffer to FILE* + FILE *fp = fmemopen(inputBuffer, strlen(inputBuffer), "r"); + Allocator alct = newAllocator(); + TokenStream ts = makeTokenStream(alct, fp); + Prog prog = parseProg(alct, ts); + + // compare output + Stmt* stmts = prog->stmts->stmts; + + assert(stmts[0]->instr == NULL); + assert(strcmp("start", stmts[0]->label->name) == 0); + + assert(stmts[1]->label == NULL); + assert(stmts[1]->instr->op == ADD); + assert(stmts[1]->instr->arg->ival == 1); + + assert(strcmp("end", stmts[4]->label->name) == 0); + assert(stmts[4]->instr->op == EQ); + + printf("[PASS] assembler parser\n"); + deleteAllocator(alct); + return 0; +} |
