aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-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;
+}