diff options
| author | 2026-06-27 22:53:26 -0500 | |
|---|---|---|
| committer | 2026-06-27 22:53:26 -0500 | |
| commit | 40724faccacf055cd9f9bba4615b9f930be9b76b (patch) | |
| tree | 8df1806ef766f14a935e98ad1a04e47714f5f858 /fire-pit | |
initial commit
Diffstat (limited to 'fire-pit')
| -rw-r--r-- | fire-pit/test.c | 49 | ||||
| -rw-r--r-- | fire-pit/test.h | 77 |
2 files changed, 126 insertions, 0 deletions
diff --git a/fire-pit/test.c b/fire-pit/test.c new file mode 100644 index 0000000..822db4f --- /dev/null +++ b/fire-pit/test.c @@ -0,0 +1,49 @@ +#include "test.h" + +static int identify_setup(struct et_test *test, void *work, int exi_channel) +{ + int *pexi_channel = work; + *pexi_channel = exi_channel; + return 1; +} + +static int identify_tick(struct et_test *test, void *work) +{ + int exi_channel = *((int *)work); + + EXI_Lock(exi_channel, EXI_DEVICE_0, NULL); +} + +static et_status identify_finish(struct et_test *test, void *work) +{ + +} + +static const char *identify_translate(struct et_test *test, char *out, size_t outbuf_sz, et_status status) +{ + +} + +#define DEF_TEST(_flags, _name, _work_t, _setup, _tick, _finish, ...) { \ + .flags = _flags, \ + .name = _name, \ + .work_size = sizeof(_work_t), \ + .setup_f = _setup, \ + .tick_f = _tick, \ + .finish_f = _finish, \ + __VA_ARGS__ \ +} + +#define msg_table priv_data[0] +#define TEST_MSGS(_msg_table) .msg_table = _msg_table + +#define TEST_TRANSLATE_DEFAULT .trans_f = &et_translate_default, +#define TEST_TRANSLATE(_t) .trans_f = _t, + +const struct et_test et_tests[] = { + DEF_TEST(ET_TEST_ESSENTIAL, "Identify_Gecko", int, identify_setup, identify_tick, identify_finish, TEST_TRANSLATE(identify_translate)), +}; + + +const size_t et_ntests = sizeof(et_tests) / sizeof(et_tests[0]); + diff --git a/fire-pit/test.h b/fire-pit/test.h new file mode 100644 index 0000000..c907530 --- /dev/null +++ b/fire-pit/test.h @@ -0,0 +1,77 @@ +#ifndef EXITEST_TEST_H_INCLUDED +#define EXITEST_TEST_H_INCLUDED + +#include <gccore.h> + +struct et_test; + +typedef u32 et_status; + +/* Test passed. */ +#define ET_STATUS_PASS (et_status)0x00 + +/* Test failed. */ +#define ET_STATUS_FAIL (et_status)0x01 + +/* Test skipped or not applicable. */ +#define ET_STATUS_SKIP (et_status)0x02 + +/* Internal error during testing. */ +#define ET_STATUS_ERROR (et_status)0x03 + +#define ET_STATUS_MASK (et_status)0x03 + +#define ET_STATUS_GET_BASE(_status) ((et_status)(_status) & ~((1u << ET_STATUS_ERRCODE_SHIFT) - 1)) + +#define ET_STATUS_ERRCODE_SHIFT 2u +#define ET_STATUS_ERRCODE_MASK (((1u << ET_STATUS_PRIVATE_SHIFT) - 1) & ~ET_STATUS_MASK) +#define ET_STATUS_MAKE_ERRCODE(_code) (((et_status)(_code) << ET_STATUS_ERRCODE_SHIFT) & ET_STATUS_ERRCODE_MASK) +#define ET_STATUS_GET_ERRCODE(_status) (((et_status)(_status) & ET_STATUS_ERRCODE_MASK) >> ET_STATUS_ERRCODE_SHIFT) + +#define ET_STATUS_PRIVATE_SHIFT 8u +#define ET_STATUS_GET_PRIVATE(_status) ((et_status)(_status) >> ET_STATUS_PRIVATE_SHIFT) +#define ET_STATUS_MAKE_PRIVATE(_exp) ((et_status)(_exp) << ET_STATUS_PRIVATE_SHIFT) +#define ET_STATUS_PRIVATE_MASK (ET_STATUS_MAKE_PRIVATE(~0u)) + +typedef enum { + ET_TEST_INTERACTIVE = 0x0001u, + ET_TEST_ESSENTIAL = 0x0002u +} et_test_flags; + +typedef enum { + ET_ERRCODE_NONE = ET_STATUS_MAKE_ERRCODE(0), + ET_ERRCODE_BAD_ALLOC = ET_STATUS_MAKE_ERRCODE(0x01u), + + /* Error code is test-specific */ + ET_ERRCODE_PRIVATE = ET_STATUS_MAKE_ERRCODE(~0u), +} et_status_errcode; + +/* returns 1 to continue testing, 0 when test is complete (call finish for status) */ +typedef int (et_test_setup_proc)(struct et_test *test, void *work, int exi_channel); +typedef int (et_test_tick_proc)(struct et_test *test, void *work); +typedef et_status (et_test_finish_proc)(struct et_test *test, void *work); + +/* translates a status code into a readable message. The returned pointer is a static string, and may not have all the information + * as if a writeable buffer is passed into the function. + * + * Tests: do not write into out if outbuf_sz is too small. Try to keep the max message length within 256 bytes. */ +typedef const char *(et_test_translate_proc)(struct et_test *test, char *out, size_t outbuf_sz, et_status status); + +struct et_test { + et_test_flags flags; + const char *name; + size_t work_size; + + et_test_setup_proc *setup_f; + et_test_tick_proc *tick_f; + et_test_finish_proc *finish_f; + et_test_translate_proc *trans_f; + + const void *priv_data[4]; +}; + +/* Array of tests. */ +extern const struct et_test et_tests[]; +extern const size_t et_ntests; + +#endif /* include guard */ |
