| // Copyright Microsoft and CHERIoT Contributors. | |
| // SPDX-License-Identifier: MIT | |
| #include <cdefs.h> | |
| #include <debug.hh> | |
| #include <thread.h> | |
| __cheri_compartment("eventgroup_test") void test_eventgroup(); | |
| __cheri_compartment("mmio_test") void test_mmio(); | |
| __cheri_compartment("allocator_test") void test_allocator(); | |
| __cheri_compartment("thread_pool_test") void test_thread_pool(); | |
| __cheri_compartment("futex_test") void test_futex(); | |
| __cheri_compartment("queue_test") void test_queue(); | |
| __cheri_compartment("locks_test") void test_locks(); | |
| __cheri_compartment("crash_recovery_test") void test_crash_recovery(); | |
| __cheri_compartment("multiwaiter_test") void test_multiwaiter(); | |
| __cheri_compartment("stack_test") void test_stack(); | |
| __cheri_compartment("compartment_calls_test") void test_compartment_call(); | |
| __cheri_compartment("check_pointer_test") void test_check_pointer(); | |
| __cheri_compartment("misc_test") void test_misc(); | |
| __cheri_compartment("static_sealing_test") void test_static_sealing(); | |
| // Simple tests don't need a separate compartment. | |
| void test_global_constructors(); | |
| using Test = ConditionalDebug<true, | |
| #ifdef TEST_NAME | |
| TEST_NAME " test" | |
| #else | |
| "Test runner" | |
| #endif | |
| >; | |
| template<typename... Args> | |
| void debug_log(const char *fmt, Args... args) | |
| { | |
| Test::log(fmt, args...); | |
| } | |
| #define TEST(cond, msg, ...) Test::Invariant((cond), msg, ##__VA_ARGS__) | |
| /** | |
| * Helper to sleep for a number of ticks and not report the sleep time. | |
| */ | |
| inline Ticks sleep(Ticks ticks) | |
| { | |
| Timeout t{ticks}; | |
| thread_sleep(&t); | |
| return t.elapsed; | |
| }; |