aboutsummaryrefslogtreecommitdiff
path: root/tests/test_as_analyzer.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-03-24 20:37:41 +0800
committerMistivia <i@mistivia.com>2025-03-24 20:37:41 +0800
commit4188f791787be19f32226b8ac0f213f61cdd4666 (patch)
tree54a38cbcaf67647c2e0e865f7f1dd537456817c1 /tests/test_as_analyzer.c
parent4f7f0aa49844756dbf430f35600d7c88e1a6a730 (diff)
finish analyzer
Diffstat (limited to 'tests/test_as_analyzer.c')
-rw-r--r--tests/test_as_analyzer.c42
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;
+}