]> git.lizzy.rs Git - nothing.git/blob - test/interpreter_suite.h
Merge pull request #473 from tsoding/426
[nothing.git] / test / interpreter_suite.h
1 #ifndef INTERPRETER_SUITE_H_
2 #define INTERPRETER_SUITE_H_
3
4 #include "test.h"
5 #include "ebisp/builtins.h"
6 #include "ebisp/expr.h"
7
8 TEST(equal_test)
9 {
10     Gc *gc = create_gc();
11
12     struct Expr nil1 = NIL(gc);
13     struct Expr nil2 = NIL(gc);
14     ASSERT_TRUE(equal(nil1, nil2), {
15             fprintf(stderr, "Expected: ");
16             print_expr_as_sexpr(stderr, nil1);
17             fprintf(stderr, "\n");
18
19             fprintf(stderr, "Actual: ");
20             print_expr_as_sexpr(stderr, nil2);
21             fprintf(stderr, "\n");
22     });
23
24     struct Expr list1 =
25         CONS(gc, SYMBOL(gc, "a"),
26              CONS(gc, SYMBOL(gc, "b"),
27                   CONS(gc, SYMBOL(gc, "c"),
28                        NIL(gc))));
29     struct Expr list2 =
30         CONS(gc, SYMBOL(gc, "a"),
31              CONS(gc, SYMBOL(gc, "b"),
32                   CONS(gc, SYMBOL(gc, "c"),
33                        NIL(gc))));
34     ASSERT_TRUE(equal(list1, list2), {
35             fprintf(stderr, "Expected: ");
36             print_expr_as_sexpr(stderr, list1);
37             fprintf(stderr, "\n");
38
39             fprintf(stderr, "Actual: ");
40             print_expr_as_sexpr(stderr, list2);
41             fprintf(stderr, "\n");
42     });
43
44     destroy_gc(gc);
45
46     return 0;
47 }
48
49 TEST(assoc_test)
50 {
51     Gc *gc = create_gc();
52
53     struct Expr nil = NIL(gc);
54
55     struct Expr a = SYMBOL(gc, "a");
56     struct Expr b = SYMBOL(gc, "b");
57     struct Expr c = SYMBOL(gc, "c");
58
59     struct Expr a_pair = CONS(gc, a, NUMBER(gc, 10.0f));
60     struct Expr b_pair = CONS(gc, b, NUMBER(gc, 20.0f));
61     struct Expr c_pair = CONS(gc, c, NUMBER(gc, 30.0f));
62
63     struct Expr alist =
64         CONS(gc, a_pair,
65              CONS(gc, b_pair,
66                   CONS(gc, c_pair, nil)));
67
68     struct Expr assoc_result = assoc(a, alist);
69
70     ASSERT_TRUE(equal(a_pair, assoc_result), {
71             fprintf(stderr, "Expected: ");
72             print_expr_as_sexpr(stderr, a_pair);
73             fprintf(stderr, "\n");
74
75             fprintf(stderr, "Actual: ");
76             print_expr_as_sexpr(stderr, assoc_result);
77             fprintf(stderr, "\n");
78     });
79
80     destroy_gc(gc);
81
82     return 0;
83 }
84
85 TEST_SUITE(interpreter_suite)
86 {
87     TEST_RUN(equal_test);
88     TEST_RUN(assoc_test);
89
90     return 0;
91 }
92
93 #endif  // INTERPRETER_SUITE_H_