#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" "ENDOFFILE\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"); struct allocator * alct = new_allocator(); struct token_stream * 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; struct token* token; struct result result; while (1) { result = peek_token(alct, ts); assert(result.errmsg == NULL); assert(result.value != NULL); token = result.value; print_token(token); if (token->type == TK_ENDOFFILE) break; 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; }