TEST_VERBOSE is a preprocesser directive which TEST is dependent on. By default it is 0, in which case TEST simply fails if the condition is not true. Otherwise, a full log (as done previously) is made.
81 lines
2.1 KiB
C
81 lines
2.1 KiB
C
/* test.h: Unit test API
|
|
* Created: 2026-02-04
|
|
* Author: Aryadev Chavali
|
|
* License: See end of file
|
|
* Commentary:
|
|
*/
|
|
|
|
#ifndef TEST_H
|
|
#define TEST_H
|
|
|
|
#include <alisp/alisp.h>
|
|
|
|
#ifndef TEST_VERBOSE
|
|
#define TEST_VERBOSE 0
|
|
#endif
|
|
|
|
#define TEST_PASSED() printf("\t[%s]: Passed\n", __func__)
|
|
#if TEST_VERBOSE
|
|
#define TEST(COND, ...) \
|
|
do \
|
|
{ \
|
|
bool cond = (COND); \
|
|
if (!cond) \
|
|
{ \
|
|
printf("\t\tFAIL: "); \
|
|
} \
|
|
else \
|
|
{ \
|
|
printf("\t\tPASS: "); \
|
|
} \
|
|
printf(__VA_ARGS__); \
|
|
printf("\n\t\t [%s]\n", #COND); \
|
|
if (!cond) \
|
|
{ \
|
|
assert(0); \
|
|
} \
|
|
} while (0)
|
|
#else
|
|
#define TEST(COND, ...) \
|
|
do \
|
|
{ \
|
|
if (!(COND)) \
|
|
{ \
|
|
assert(0); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
typedef struct TestFn
|
|
{
|
|
const char *name;
|
|
void (*fn)(void);
|
|
} test_fn;
|
|
|
|
#define MAKE_TEST_FN(NAME) {.name = #NAME, .fn = NAME}
|
|
|
|
typedef struct
|
|
{
|
|
const char *name;
|
|
const test_fn *tests;
|
|
const u64 size;
|
|
} test_suite_t;
|
|
|
|
#define MAKE_TEST_SUITE(NAME) \
|
|
{.name = #NAME, .tests = NAME, .size = ARRSIZE(NAME)}
|
|
|
|
#endif
|
|
|
|
/* Copyright (C) 2026 Aryadev Chavali
|
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for
|
|
* details.
|
|
|
|
* You may distribute and modify this code under the terms of the GNU General
|
|
* Public License Version 2, which you should have received a copy of along with
|
|
* this program. If not, please go to <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|