From 77f85adebf25b23a983385101cb290f1e6713c35 Mon Sep 17 00:00:00 2001 From: Elijah Cohen Date: Sat, 17 Aug 2024 01:37:45 +0000 Subject: [PATCH] some testing infra etc --- ideas.org | 3 +++ src/builtins/core.c | 1 - src/test.c | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/ideas.org b/ideas.org index 6ac79f0..3991bab 100644 --- a/ideas.org +++ b/ideas.org @@ -1,4 +1,7 @@ MEMORY MANAGEMENT +IMPORTANT: all builtins need to free themselves when executed + + okay gonna start with making sure the parser is good... how? bad thing about this: diff --git a/src/builtins/core.c b/src/builtins/core.c index 69aced7..5565c33 100644 --- a/src/builtins/core.c +++ b/src/builtins/core.c @@ -15,7 +15,6 @@ Sexpr* c_quote(Sexpr* b, Sexpr* rest, Sexpr* env) { if(CORE_QUOTE_ARGS != u64_get_num_args(b)) return cons(b, rest); - //return car(b->value.b.args); Sexpr* arg = clone(car(b->value.b.args)); sexpr_free(b); return cons(from_quote(arg), rest); diff --git a/src/test.c b/src/test.c index 0c59b12..8a5b965 100644 --- a/src/test.c +++ b/src/test.c @@ -9,6 +9,19 @@ #include "eval.h" #include "builtins.h" +void run_eval_test(char* str) { + Sexpr* env = init_dict(); + env = load_env(env); + Sexpr* parsed = parse(str); + Sexpr* val = eval(parsed, env); + char* out = sprint_sexpr(val); + printf(" -> %s\n", out); + free(out); + //sexpr_free(parsed); + sexpr_free(val); + sexpr_free(env); +} + void test_basics() { printf("testing basics...\n"); @@ -239,12 +252,33 @@ void memtest_eval() { printf("uh\n"); sexpr_free(val); printf("um\n"); + + + parsed = parse("((+ 4) 6)"); + val = eval(clone(car(parsed)), env); + out = sprint_sexpr(val); + printf(" - %s\n", out); + free(out); + free(parsed); + free(val); + sexpr_free(env); } + + + +void eval_tests() { + run_eval_test("(quote abcd)"); + run_eval_test("(+ 3 6)"); + run_eval_test("((+ 3) 7)"); +} + + void run_tests(){ - memtest_eval(); + eval_tests(); + //memtest_eval(); //mem_testing(); //mem_parser(); //memtest_dict(); -- 2.39.2