aboutsummaryrefslogtreecommitdiff
path: root/tests/test_as_parser.c
blob: e71f190309bd1b214b6c175137ee450f02d00292 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <string.h> 
#include <assert.h>

#include "as_tokenizer.h"
#include "as_parser.h"
#include "utils.h"

char *inputBuffer = 
    "start:\n"
    "    add 1\n"
    "    sub start\n"
    "    div\n"
    "end:    eq\n";

int main(int argc, char** argv) {
    printf("[TEST] assembler parser\n");
    // make a memory buffer to FILE*
    FILE *fp = fmemopen(inputBuffer, strlen(inputBuffer), "r");
    Allocator alct = newAllocator();
    TokenStream ts = makeTokenStream(alct, fp);
    Prog prog = parseProg(alct, ts);
    
    // compare output
    Stmt* stmts = prog->stmts->stmts;

    assert(stmts[0]->instr == NULL);
    assert(strcmp("start", stmts[0]->label->name) == 0);

    assert(stmts[1]->label == NULL);
    assert(stmts[1]->instr->op == OP_ADD);
    assert(stmts[1]->instr->arg->ival == 1);

    assert(strcmp("end", stmts[4]->label->name) == 0);
    assert(stmts[4]->instr->op == OP_EQ);

    printf("[PASS] assembler parser\n");
    deleteAllocator(alct);
    return 0;
}