diff options
Diffstat (limited to 'tests/test_as_analyzer.c')
| -rw-r--r-- | tests/test_as_analyzer.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/test_as_analyzer.c b/tests/test_as_analyzer.c new file mode 100644 index 0000000..4c56131 --- /dev/null +++ b/tests/test_as_analyzer.c @@ -0,0 +1,42 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#include "as_tokenizer.h" +#include "as_parser.h" +#include "as_analyzer.h" +#include "utils.h" + +char *input_buffer = + "start:\n" + " imm 1\n" + "mid: add\n" + " call start\n" + " sub\n" + ".insec: add\n" + " div\n" + "end: eq\n"; + +int main(int argc, char** argv) { + printf("[TEST] assembler analyzer\n"); + // make a memory buffer to FILE* + FILE *fp = fmemopen(input_buffer, strlen(input_buffer), "r"); + allocator_t alct = new_allocator(); + token_stream_t ts = new_token_stream(alct, fp); + prog_t prog = parse_prog(alct, ts); + struct sym_table sym_table = analyze_prog(alct, prog); + + assert(strcmp(sym_table.buf[0].name, "start") == 0); + assert(strcmp(sym_table.buf[1].name, "mid") == 0); + assert(strcmp(sym_table.buf[2].name, "mid.insec") == 0); + assert(strcmp(sym_table.buf[3].name, "end") == 0); + + assert(sym_table.buf[0].offset == 0); + assert(sym_table.buf[1].offset == 9); + assert(sym_table.buf[2].offset == 21); + assert(sym_table.buf[3].offset == 23); + + printf("[PASS] assembler analyzer\n"); + delete_allocator(alct); + return 0; +} |
