Mercurial > lbo > hg > ylisp
changeset 106:81aabf072d16
built-ins: Test `for` and `plus`
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Wed, 28 Aug 2019 12:39:39 +0200 |
parents | c8984769f2ac |
children | 1b3e8cf29e1e |
files | src/built-ins_test.c |
diffstat | 1 files changed, 52 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/built-ins_test.c Wed Aug 28 12:39:23 2019 +0200 +++ b/src/built-ins_test.c Wed Aug 28 12:39:39 2019 +0200 @@ -5,6 +5,8 @@ #include <src/value.h> void test_builtin_translate(void) { + fprintf(stderr, "test_builtin_translate ============\n"); + yexpr_t expr = yexpr_new(); yexpr_set_atom(&expr, yatom_get_or_add("atom")); @@ -27,7 +29,10 @@ } void test_builtin_for(void) { - ystr_t input = ystr_new("(for loopvar (1 2 3) loopvar)"), error = ystr_new(NULL); + fprintf(stderr, "test_builtin_for ============\n"); + + ystr_t input = ystr_new("(for loopvar (1 2 3) loopvar)"), + error = ystr_new(NULL); yexpr_t program = yexpr_new(); assert(yparse_str(&input, &program, &error)); yexpr_t* for_expr = YVEC_AT(&program.value.list, 0, yexpr_t); @@ -35,36 +40,75 @@ assert(ybuiltin_translate(YVEC_AT(&for_expr->value.list, 0, yexpr_t))); - yeval_state_t state = { .call_stack = YVEC_NEW(NULL, 0, yexpr_t) }; + yeval_state_t state = {.call_stack = YVEC_NEW(NULL, 0, yexpr_t)}; YVEC_PUSH(&state.call_stack, for_expr); yexpr_t result = ybuiltin_run(YBUILTIN_FOR, &state); assert(result.typ == YEXPR_LIST); + yexpr_debug(&result); + yvec_destroy(&state.call_stack); yexpr_destroy(&program); + yexpr_destroy(&result); ystr_destroy(&input); } void test_builtin_for_complex(void) { - ystr_t input = ystr_new("(for loopvar (1 2 3) (+ loopvar 1))"), error = ystr_new(NULL); + fprintf(stderr, "test_builtin_for_complex ============\n"); + + ystr_t input = ystr_new("(for loopvar (1 2 3) (+ loopvar 1 2))"), + error = ystr_new(NULL); yexpr_t program = yexpr_new(); assert(yparse_str(&input, &program, &error)); yexpr_t* for_expr = YVEC_AT(&program.value.list, 0, yexpr_t); assert(for_expr->typ == YEXPR_LIST); assert(ybuiltin_translate(YVEC_AT(&for_expr->value.list, 0, yexpr_t))); - assert(ybuiltin_translate(YVEC_AT(&YVEC_AT(&for_expr->value.list, 3, yexpr_t)->value.list, 0, yexpr_t))); + assert(ybuiltin_translate(YVEC_AT( + &YVEC_AT(&for_expr->value.list, 3, yexpr_t)->value.list, 0, yexpr_t))); yexpr_debug(for_expr); - yeval_state_t state = { .call_stack = YVEC_NEW(NULL, 0, yexpr_t) }; + yeval_state_t state = {.call_stack = YVEC_NEW(NULL, 0, yexpr_t)}; YVEC_PUSH(&state.call_stack, for_expr); yexpr_t result = ybuiltin_run(YBUILTIN_FOR, &state); assert(result.typ == YEXPR_LIST); + // (1 2 3) should each be increased by 3. yexpr_debug(&result); - fputs("\n", stderr); + assert(4 == YVEC_AT(&result.value.list, 0, yexpr_t)->value.n); + + yvec_destroy(&state.call_stack); + yexpr_destroy(&program); + yexpr_destroy(&result); + ystr_destroy(&input); +} + +void test_builtin_for_noresult(void) { + fprintf(stderr, "test_builtin_for_complex ============\n"); + + ystr_t input = ystr_new("(for loopvar (1 2 3) (+ loopvar 1 2))"), + error = ystr_new(NULL); + yexpr_t program = yexpr_new(); + assert(yparse_str(&input, &program, &error)); + yexpr_t* for_expr = YVEC_AT(&program.value.list, 0, yexpr_t); + assert(for_expr->typ == YEXPR_LIST); + + assert(ybuiltin_translate(YVEC_AT(&for_expr->value.list, 0, yexpr_t))); + assert(ybuiltin_translate(YVEC_AT( + &YVEC_AT(&for_expr->value.list, 3, yexpr_t)->value.list, 0, yexpr_t))); + yexpr_debug(for_expr); + + yeval_state_t state = {.call_stack = YVEC_NEW(NULL, 0, yexpr_t)}; + YVEC_PUSH(&state.call_stack, for_expr); + + yexpr_t result = ybuiltin_run(YBUILTIN_FOR, &state); + assert(result.typ == YEXPR_LIST); + + // (1 2 3) should each be increased by 3. + yexpr_debug(&result); + assert(4 == YVEC_AT(&result.value.list, 0, yexpr_t)->value.n); yvec_destroy(&state.call_stack); yexpr_destroy(&program); @@ -72,6 +116,8 @@ } void test_builtin_let(void) { + fprintf(stderr, "test_builtin_let ============\n"); + yexpr_t ref_expr = yexpr_new(); yexpr_t let_expr = yexpr_new(); yref_t ref = yref_new(); @@ -100,7 +146,6 @@ yexpr_t result = ybuiltin_run(YBUILTIN_LET, &state); yexpr_debug(&result); - fputs("\n", stderr); assert(result.typ == YEXPR_UNDEF); assert(stack->len == 0); @@ -114,7 +159,6 @@ YVEC_PUSH(stack, &let_call); result = ybuiltin_run(YBUILTIN_LET, &state); yexpr_debug(&result); - fputs("\n", stderr); assert(result.typ == YEXPR_EXCEPTION); assert(stack->len == 0); yexpr_destroy(&result);