]> git.lizzy.rs Git - nothing.git/blob - test/parser_suite.h
Implement callable_p
[nothing.git] / test / parser_suite.h
1 #ifndef PARSER_SUITE_H_
2 #define PARSER_SUITE_H_
3
4 #include "test.h"
5 #include "script/parser.h"
6 #include "script/gc.h"
7
8 TEST(read_expr_from_file_test)
9 {
10     Gc *gc = create_gc();
11
12     struct ParseResult result = read_expr_from_file(gc, "test-data/simple-sum.lisp");
13
14     ASSERT_TRUE(!result.is_error, result.error_message);
15
16     struct Expr head = result.expr;
17
18     struct Expr expr = head;
19     ASSERT_INTEQ(EXPR_CONS, expr.type);
20     ASSERT_INTEQ(EXPR_ATOM, expr.cons->car.type);
21     ASSERT_INTEQ(ATOM_SYMBOL, expr.cons->car.atom->type);
22     ASSERT_STREQ("+", expr.cons->car.atom->sym);
23
24     expr = expr.cons->cdr;
25     ASSERT_INTEQ(EXPR_CONS, expr.type);
26     ASSERT_INTEQ(EXPR_ATOM, expr.cons->car.type);
27     ASSERT_INTEQ(ATOM_NUMBER, expr.cons->car.atom->type);
28     ASSERT_LONGINTEQ(1L, expr.cons->car.atom->num);
29
30     expr = expr.cons->cdr;
31     ASSERT_INTEQ(EXPR_CONS, expr.type);
32     ASSERT_INTEQ(EXPR_ATOM, expr.cons->car.type);
33     ASSERT_INTEQ(ATOM_NUMBER, expr.cons->car.atom->type);
34     ASSERT_LONGINTEQ(2L, expr.cons->car.atom->num);
35
36     expr = expr.cons->cdr;
37     ASSERT_INTEQ(EXPR_CONS, expr.type);
38     ASSERT_INTEQ(EXPR_ATOM, expr.cons->car.type);
39     ASSERT_INTEQ(ATOM_NUMBER, expr.cons->car.atom->type);
40     ASSERT_LONGINTEQ(3L, expr.cons->car.atom->num);
41
42     expr = expr.cons->cdr;
43     ASSERT_INTEQ(EXPR_ATOM, expr.type);
44     ASSERT_INTEQ(ATOM_SYMBOL, expr.atom->type);
45     ASSERT_STREQ("nil", expr.atom->sym);
46
47     destroy_gc(gc);
48
49     return 0;
50 }
51
52 TEST_SUITE(parser_suite)
53 {
54     TEST_RUN(read_expr_from_file_test);
55
56     return 0;
57 }
58
59 #endif  // PARSER_SUITE_H_