]> git.eli173.com Git - klapaucius/commitdiff
some testing infra etc
authorElijah Cohen <cohen@eli173.com>
Sat, 17 Aug 2024 01:37:45 +0000 (01:37 +0000)
committerElijah Cohen <cohen@eli173.com>
Sat, 17 Aug 2024 01:37:45 +0000 (01:37 +0000)
ideas.org
src/builtins/core.c
src/test.c

index 6ac79f06f40a501a9bf2ec0db6536237c0ee542f..3991babfdb6f041768542522743de42a41f38f9a 100644 (file)
--- 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:
index 69aced7fd409a5c563800e621486e1776ce8128a..5565c335b719af942275d37753c082fb655faa67 100644 (file)
@@ -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);
index 0c59b12834089a74dcc7de0f38307b066005d136..8a5b96502311db4c255b4584e798ba9adfeb89e7 100644 (file)
@@ -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();