More closure tests.

This commit is contained in:
Lewis Van Winkle
2016-02-24 22:58:19 -06:00
parent 04134389f2
commit a23801c45f

25
test.c
View File

@@ -425,6 +425,10 @@ double clo2(void *context, double a, double b) {
return a + b; return a + b;
} }
double cell(void *context, double a) {
double *c = context;
return c[(int)a];
}
void test_closure() { void test_closure() {
@@ -432,6 +436,7 @@ void test_closure() {
{"c0", clo0, TE_CLOSURE0}, {"c0", clo0, TE_CLOSURE0},
{"c1", clo1, TE_CLOSURE1}, {"c1", clo1, TE_CLOSURE1},
{"c2", clo2, TE_CLOSURE2}, {"c2", clo2, TE_CLOSURE2},
{"cell", cell, TE_CLOSURE1},
}; };
test_case cases[] = { test_case cases[] = {
@@ -453,6 +458,26 @@ void test_closure() {
lfequal(te_eval_closure(ex, &extra), answer + extra); lfequal(te_eval_closure(ex, &extra), answer + extra);
te_free(ex); te_free(ex);
} }
double c[] = {5,6,7,8,9};
test_case cases2[] = {
{"cell 0", 5},
{"cell 1", 6},
{"cell 0 + cell 1", 11},
{"cell 1 * cell 3 + cell 4", 57},
};
for (i = 0; i < sizeof(cases2) / sizeof(test_case); ++i) {
const char *expr = cases2[i].expr;
const double answer = cases2[i].answer;
int err;
te_expr *ex = te_compile(expr, lookup, sizeof(lookup)/sizeof(te_variable), &err);
lok(ex);
lfequal(te_eval_closure(ex, c), answer);
te_free(ex);
}
} }