cons_test written

This commit is contained in:
2025-08-21 21:27:01 +01:00
parent 29b18bc1de
commit ed37f7cd80
2 changed files with 35 additions and 4 deletions

View File

@@ -49,6 +49,7 @@ Test if ~make_vec~ works with ~as_vec~, ~cons~ with ~as_cons~ AND
We may need to think of effective ways to deal with NILs in ~car~ and We may need to think of effective ways to deal with NILs in ~car~ and
~cdr~. Maybe make functions as well as the macros so I can choose ~cdr~. Maybe make functions as well as the macros so I can choose
between them? between them?
*** TODO Write more tests
** TODO Test system registration of allocated units :test: ** TODO Test system registration of allocated units :test:
In particular, does clean up work as we expect? Do we have situations In particular, does clean up work as we expect? Do we have situations
where we may double free or not clean up something we should've? where we may double free or not clean up something we should've?

38
main.c
View File

@@ -126,6 +126,11 @@ void intern_test(void)
void make_vec_test(void) void make_vec_test(void)
{ {
sys_t system = {0};
sys_init(&system);
// Generating substrings
struct Test struct Test
{ {
u64 start, size; u64 start, size;
@@ -135,10 +140,6 @@ void make_vec_test(void)
{32, 64}, {32, 64},
{0, ARRSIZE(text)}, {0, ARRSIZE(text)},
}; };
sys_t system = {0};
sys_init(&system);
for (u64 i = 0; i < ARRSIZE(tests); ++i) for (u64 i = 0; i < ARRSIZE(tests); ++i)
{ {
struct Test test = tests[i]; struct Test test = tests[i];
@@ -155,6 +156,33 @@ void make_vec_test(void)
sys_cleanup(&system); sys_cleanup(&system);
} }
void cons_test(void)
{
sys_t system = {0};
sys_init(&system);
// Iterate through each "word" in words, make a large contiguous list which is
// its reverse
lisp_t *lisp = NIL;
for (u64 i = 0; i < ARRSIZE(words); ++i)
{
char *word = words[i];
lisp_t *lword = intern(&system, SV(word, strlen(word)));
lisp = cons(&system, lword, lisp);
}
// Then iterate through it
printf("[cons_test]: ");
for (lisp_t *iter = lisp; iter; iter = cdr(iter))
{
lisp_t *item = car(iter);
printf("%s ", as_sym(item));
}
printf("\n");
sys_cleanup(&system);
}
int main(void) int main(void)
{ {
vec_test(); vec_test();
@@ -166,5 +194,7 @@ int main(void)
intern_test(); intern_test();
printf("\n"); printf("\n");
make_vec_test(); make_vec_test();
printf("\n");
cons_test();
return 0; return 0;
} }