#include #include #include #include #include "as_tokenizer.h" #include "utils.h" char *input_buffer = "start:\n" " add 1\n" " sub start\n" " div\n" " eq\n"; char *expected_output = "LABEL: start, line: 1, col: 1\n" "COLON\n" "NEWLINE\n" "OP: add, line: 2, col: 5\n" "ARG: 1, line: 2, col: 10\n" "NEWLINE\n" "OP: sub, line: 3, col: 5\n" "LABEL: start, line: 3, col: 9\n" "NEWLINE\n" "OP: div, line: 4, col: 5\n" "NEWLINE\n" "OP: eq, line: 5, col: 5\n" "NEWLINE\n"; int main(int argc, char** argv) { printf("[TEST] assembler tokenizer\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); char *output_buffer = malloc(10240); // redirect stdout to a file 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)); next_token(alct, ts); } fclose(out); stdout = origin_stdout; assert(strcmp(output_buffer, expected_output) == 0); printf("[PASS] assembler tokenizer\n"); free(output_buffer); delete_allocator(alct); return 0; }