add testing code

This commit is contained in:
Quinn
2025-04-22 11:59:51 +02:00
committed by Quinn
parent 4b611c7918
commit f7994b7d50
2 changed files with 57 additions and 0 deletions

18
test/src/main.c Normal file
View File

@@ -0,0 +1,18 @@
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(void) {
/*
// tests that should be performed
testdat tests[] = {
};
// get test count
size_t n = sizeof(tests) / sizeof(tests[0]);
*/
return exec_tests(NULL, 0);
// return exec_tests(tests, n);
}

39
test/src/test.h Normal file
View File

@@ -0,0 +1,39 @@
#pragma once
#include <stdio.h>
// evaluates the test
// returns 1 upon error
static inline int assert_helper(int cond, char const* restrict fname, unsigned ln, char const* restrict fnname, char const* restrict expr) {
if (cond)
printf("[\033[32;1m OK \033[0m] %s -> %s:%u (%s)\n", fnname, fname, ln, expr);
else
printf("[\033[31;1m FAIL \033[0m] %s -> %s:%u (%s)\n", fnname, fname, ln, expr);
return !cond;
}
#define assert_true(expr) assert_helper(!!(expr), __FILE_NAME__, __LINE__, __func__, #expr) // evaluation expected to be true
#define assert_false(expr) assert_helper(!(expr), __FILE_NAME__, __LINE__, __func__, #expr) // evaluation expected to be false
// contains the data for executing a single test
struct testdat {
int (*test)(void*); // test, returns 0 upon success, non-zero upon failure
void* args; // arguments to the test
};
typedef struct testdat testdat;
// executes the tests, returns the amount of failed tests; >0: failure
static inline size_t exec_tests(testdat* dat, size_t ntests) {
size_t i;
size_t err = 0;
// perform tests and count the error state
for (i = 0; i < ntests; i++)
err += !!(dat[i].test(dat[i].args));
// give final score
if (!err)
fprintf(stdout, "tests completed! (%zu/%zu)\n", ntests - err, ntests);
else
fprintf(stderr, " tests failed! (%zu/%zu)\n", ntests - err, ntests);
return err;
}