diff options
Diffstat (limited to 'test/parser.c')
-rw-r--r-- | test/parser.c | 187 |
1 files changed, 138 insertions, 49 deletions
diff --git a/test/parser.c b/test/parser.c index 06a305e..78e4066 100644 --- a/test/parser.c +++ b/test/parser.c @@ -6,68 +6,157 @@ unsigned int TESTS_RUN = 0, TESTS_PASSED = 0; +#define PARSER_SETUP(SRC) \ + pp = pp_init(SRC); \ + pp_run(pp); \ + lexer = lexer_init(pp->psrc); \ + lexer_run(lexer); \ + parser = parser_init(lexer->tokenl); \ + parser_run(parser); + int main(int argc, char** argv) { tree_t* tree_0; pp_t* pp; lexer_t* lexer; parser_t* parser; - tree_0 = tree_init(TREE_TYPE_BLOCK); - tree_t* treep_00 = tree_0->data.block.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_01 = treep_00->data.expr.val = tree_init(TREE_TYPE_DEF); - tree_t* treep_02 = treep_01->data.def.tag = tree_init(TREE_TYPE_TAG); - treep_02->data.tag.val = "int"; - tree_t* treep_03 = treep_02->data.tag.nxt = tree_init(TREE_TYPE_TAG); - treep_03->data.tag.val = "f"; - treep_03->data.tag.nxt = NULL; - treep_01->data.def.arg = NULL; - tree_t* treep_04 = treep_01->data.def.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_05 = treep_04->data.expr.val = tree_init(TREE_TYPE_BLOCK); - tree_t* treep_06 = treep_05->data.block.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_07 = treep_06->data.expr.val = tree_init(TREE_TYPE_CALL); - treep_07->data.call.target = "a"; - tree_t* treep_08 = treep_07->data.call.arg = tree_init(TREE_TYPE_CARG); - tree_t* treep_09 = treep_08->data.carg.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_10 = treep_09->data.expr.val = tree_init(TREE_TYPE_CALL); - treep_10->data.call.target = "b"; - treep_10->data.call.arg = NULL; - treep_08->data.carg.nxt = NULL; - tree_t* treep_11 = treep_05->data.block.nxt = tree_init(TREE_TYPE_BLOCK); - tree_t* treep_12 = treep_11->data.block.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_13 = treep_12->data.expr.val = tree_init(TREE_TYPE_CALL); - treep_13->data.call.target = "c"; - tree_t* treep_14 = treep_13->data.call.arg = tree_init(TREE_TYPE_CARG); - tree_t* treep_15 = treep_14->data.carg.val = tree_init(TREE_TYPE_EXPR); - tree_t* treep_16 = treep_15->data.expr.val = tree_init(TREE_TYPE_CALL); - treep_16->data.call.target = "d"; - treep_16->data.call.arg = NULL; - treep_14->data.carg.nxt = NULL; - treep_11->data.block.nxt = NULL; - tree_0->data.block.nxt = NULL; - - /* - - [block] + /* Simple empty block. */ + char src_0[] = ""; + + /* + + [block] + val: + NULL + nxt: + NULL + + */ + + tree_0 = tree_init(TREE_TYPE_BLOCK); + tree_0->data.block.val = NULL; + tree_0->data.block.nxt = NULL; + + PARSER_SETUP(src_0); + + tree_print(tree_0, 0); + tree_print(parser->tree, 0); + + ASSERT(tree_cmp(parser->tree, tree_0) == 1); + + /* More complicated tree. */ + char src_1[] = "" \ + ":int:f = {" \ + "a.b;" \ + "c.d" + "}"; + /* + [block] + val: + [expression] + val: + [def] + tag: + [tag] + val: + "int" + nxt: + [tag] + val: + "f" + nxt: + NULL + arg: + NULL + val: + [expression] + val: + [block] + val: + [expression] + val: + [call] + target: + "a" + arg: + [carg] + val: + [call] + target: + "b" + arg: + NULL + nxt: + NULL + nxt: + [block] + val: + [expression] + val: + [call] + target: + "c" + arg: + [carg] + val: + [call] + target: + "d" + nxt: + NULL + nxt: + NULL + nxt: + NULL + nxt: + NULL - */ + */ - char src_0[] = "" \ - ":int:f = {" \ - "a.b;" \ - "c.d" - "}"; + tree_0 = tree_init(TREE_TYPE_BLOCK); + tree_t* treep_00 = tree_0->data.block.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_01 = treep_00->data.expr.val = tree_init(TREE_TYPE_DEF); + tree_t* treep_02 = treep_01->data.def.tag = tree_init(TREE_TYPE_TAG); + treep_02->data.tag.val = "int"; + tree_t* treep_03 = treep_02->data.tag.nxt = tree_init(TREE_TYPE_TAG); + treep_03->data.tag.val = "f"; + treep_03->data.tag.nxt = NULL; + treep_01->data.def.arg = NULL; + tree_t* treep_04 = treep_01->data.def.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_05 = treep_04->data.expr.val = tree_init(TREE_TYPE_BLOCK); + tree_t* treep_06 = treep_05->data.block.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_07 = treep_06->data.expr.val = tree_init(TREE_TYPE_CALL); + treep_07->data.call.target = "a"; + tree_t* treep_08 = treep_07->data.call.arg = tree_init(TREE_TYPE_CARG); + tree_t* treep_09 = treep_08->data.carg.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_10 = treep_09->data.expr.val = tree_init(TREE_TYPE_CALL); + treep_10->data.call.target = "b"; + treep_10->data.call.arg = NULL; + treep_08->data.carg.nxt = NULL; + tree_t* treep_11 = treep_05->data.block.nxt = tree_init(TREE_TYPE_BLOCK); + tree_t* treep_12 = treep_11->data.block.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_13 = treep_12->data.expr.val = tree_init(TREE_TYPE_CALL); + treep_13->data.call.target = "c"; + tree_t* treep_14 = treep_13->data.call.arg = tree_init(TREE_TYPE_CARG); + tree_t* treep_15 = treep_14->data.carg.val = tree_init(TREE_TYPE_EXPR); + tree_t* treep_16 = treep_15->data.expr.val = tree_init(TREE_TYPE_CALL); + treep_16->data.call.target = "d"; + treep_16->data.call.arg = NULL; + treep_14->data.carg.nxt = NULL; + treep_11->data.block.nxt = NULL; + tree_0->data.block.nxt = NULL; - pp = pp_init(src_0); - pp_run(pp); + pp = pp_init(src_0); + pp_run(pp); - lexer = lexer_init(pp->psrc); - lexer_run(lexer); + lexer = lexer_init(pp->psrc); + lexer_run(lexer); - parser = parser_init(lexer->tokenl); - parser_run(parser); + parser = parser_init(lexer->tokenl); + parser_run(parser); - ASSERT(tree_cmp(tree_0, parser->tree)); + ASSERT(tree_cmp(tree_0, parser->tree)); pp_destroy(pp); parser_destroy(parser); |