From 762dabd3e5e37923bb1c10571a497d8bdeea1f04 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Thu, 5 Feb 2026 06:44:35 +0000 Subject: [PATCH] tests: Better suite creation While the previous method of in-lining a stack allocated array of tests into the suite struct declaration was nice, we had to update size manually. This macro will allow us to just append new tests to the suite without having to care for that. It generates a uniquely named variable for the test array, then uses that test array in the suite declaration. Nice and easy. --- test/test.h | 9 +++++++-- test/test_lisp_api.c | 18 +++++------------- test/test_stream.c | 18 +++--------------- test/test_sv.c | 9 +-------- test/test_symtable.c | 11 +++-------- test/test_vec.c | 12 +++--------- 6 files changed, 22 insertions(+), 55 deletions(-) diff --git a/test/test.h b/test/test.h index ebc7d6d..1cf37f7 100644 --- a/test/test.h +++ b/test/test.h @@ -61,8 +61,13 @@ typedef struct const u64 size; } test_suite_t; -#define MAKE_TEST_SUITE(NAME) \ - {.name = #NAME, .tests = NAME, .size = ARRSIZE(NAME)} +#define MAKE_TEST_SUITE(NAME, DESC, ...) \ + const test_fn NAME##_TESTS[] = {__VA_ARGS__}; \ + const test_suite_t NAME = { \ + .name = DESC, \ + .tests = NAME##_TESTS, \ + .size = ARRSIZE(NAME##_TESTS), \ + } #endif diff --git a/test/test_lisp_api.c b/test/test_lisp_api.c index 107613d..ea8b782 100644 --- a/test/test_lisp_api.c +++ b/test/test_lisp_api.c @@ -186,19 +186,11 @@ void sys_test(void) TEST_PASSED(); } -const test_suite_t LISP_API_SUITE = { - .name = "Lisp API Tests", - .tests = - (test_fn[]){ - MAKE_TEST_FN(smi_test), - MAKE_TEST_FN(smi_oob_test), - MAKE_TEST_FN(sym_fresh_test), - MAKE_TEST_FN(sym_unique_test), - MAKE_TEST_FN(cons_test), - MAKE_TEST_FN(sys_test), - }, - .size = 6, -}; +MAKE_TEST_SUITE(LISP_API_SUITE, "LISP API Tests", + + MAKE_TEST_FN(smi_test), MAKE_TEST_FN(smi_oob_test), + MAKE_TEST_FN(sym_fresh_test), MAKE_TEST_FN(sym_unique_test), + MAKE_TEST_FN(cons_test), MAKE_TEST_FN(sys_test), ); /* Copyright (C) 2026 Aryadev Chavali diff --git a/test/test_stream.c b/test/test_stream.c index aac5b32..66e123d 100644 --- a/test/test_stream.c +++ b/test/test_stream.c @@ -87,21 +87,9 @@ void stream_test_line_col(void) TODO("Not implemented"); } -const test_suite_t STREAM_SUITE = { - .name = "Stream Tests", - .tests = - (test_fn[]){ - MAKE_TEST_FN(stream_test_string), - // MAKE_TEST_FN(stream_test_file), - // MAKE_TEST_FN(stream_test_peek_next), - // MAKE_TEST_FN(stream_test_seek), - // MAKE_TEST_FN(stream_test_substr), - // MAKE_TEST_FN(stream_test_till), - // MAKE_TEST_FN(stream_test_while), - // MAKE_TEST_FN(stream_test_line_col), - }, - .size = 1, -}; +MAKE_TEST_SUITE(STREAM_SUITE, "Stream Tests", + + MAKE_TEST_FN(stream_test_string), ); /* Copyright (C) 2026 Aryadev Chavali diff --git a/test/test_sv.c b/test/test_sv.c index 6298999..2926287 100644 --- a/test/test_sv.c +++ b/test/test_sv.c @@ -28,14 +28,7 @@ void sv_copy_test(void) } } -const test_suite_t SV_SUITE = { - .name = "String View Tests", - .tests = - (test_fn[]){ - MAKE_TEST_FN(sv_copy_test), - }, - .size = 1, -}; +MAKE_TEST_SUITE(SV_SUITE, "String View Tests", MAKE_TEST_FN(sv_copy_test), ); /* Copyright (C) 2026 Aryadev Chavali diff --git a/test/test_symtable.c b/test/test_symtable.c index d10a737..21ca854 100644 --- a/test/test_symtable.c +++ b/test/test_symtable.c @@ -22,14 +22,9 @@ void symtable_test(void) TEST_PASSED(); } -const test_suite_t SYMTABLE_SUITE = { - .name = "Symbol Table Tests", - .tests = - (test_fn[]){ - MAKE_TEST_FN(symtable_test), - }, - .size = 1, -}; +MAKE_TEST_SUITE(SYMTABLE_SUITE, "Symbol Table Tests", + + MAKE_TEST_FN(symtable_test), ); /* Copyright (C) 2026 Aryadev Chavali diff --git a/test/test_vec.c b/test/test_vec.c index 238de1c..54c764d 100644 --- a/test/test_vec.c +++ b/test/test_vec.c @@ -69,15 +69,9 @@ void vec_test_substr(void) TEST_PASSED(); } -const test_suite_t VEC_SUITE = { - .name = "Vector Tests", - .tests = - (test_fn[]){ - MAKE_TEST_FN(vec_test_concat), - MAKE_TEST_FN(vec_test_substr), - }, - .size = 2, -}; +MAKE_TEST_SUITE(VEC_SUITE, "Vector Tests", + + MAKE_TEST_FN(vec_test_concat), MAKE_TEST_FN(vec_test_substr), ); /* Copyright (C) 2026 Aryadev Chavali