aboutsummaryrefslogtreecommitdiff
path: root/test_runner.h
diff options
context:
space:
mode:
Diffstat (limited to 'test_runner.h')
-rw-r--r--test_runner.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/test_runner.h b/test_runner.h
new file mode 100644
index 0000000..5b891b0
--- /dev/null
+++ b/test_runner.h
@@ -0,0 +1,32 @@
+#pragma once
+
+/* Linker-generated lists derived from U-Boot source `include/linker_lists.h`
+ * with minor modification to store function pointers */
+#define list_head(entry_type, list_name) \
+ ({ static char head[0] __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_1")));(entry_type*)&head; })
+
+#define list_tail(entry_type, list_name) \
+ ({ static char tail[0] __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_3")));(entry_type*)&tail; })
+
+#define list_entry_count(entry_type, list_name) \
+ ({ \
+ entry_type* head = list_head(entry_type, list_name); \
+ entry_type* tail = list_tail(entry_type, list_name); \
+ (size_t)(tail - head); \
+ })
+
+#define list_entry(entry_type, list_name, entry_name) \
+ entry_type _test_runner_list_2_##list_name_2_##entry_name __attribute__((__aligned__(4), unused, section(".test_runner_list_2_"#list_name"_2_"#entry_name)))
+
+#define RUNNER_DECLARE_TEST(test_name) \
+ void test_name(void);\
+ list_entry(struct test_fn, test_list, test_name) = { .name = #test_name, .file = __FILE__, .line = __LINE__, .fn = test_name}; \
+ void test_name(void)
+
+struct test_fn {
+ const char *name;
+ const char *file;
+ int line;
+ void (*fn)();
+};
+