From a23801c45f2f63d762e41594383af6dce0d36f0a Mon Sep 17 00:00:00 2001 From: Lewis Van Winkle Date: Wed, 24 Feb 2016 22:58:19 -0600 Subject: [PATCH] More closure tests. --- test.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test.c b/test.c index f4513e7..5c01dab 100644 --- a/test.c +++ b/test.c @@ -425,6 +425,10 @@ double clo2(void *context, double a, double b) { return a + b; } +double cell(void *context, double a) { + double *c = context; + return c[(int)a]; +} void test_closure() { @@ -432,6 +436,7 @@ void test_closure() { {"c0", clo0, TE_CLOSURE0}, {"c1", clo1, TE_CLOSURE1}, {"c2", clo2, TE_CLOSURE2}, + {"cell", cell, TE_CLOSURE1}, }; test_case cases[] = { @@ -453,6 +458,26 @@ void test_closure() { lfequal(te_eval_closure(ex, &extra), answer + extra); 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); + } }