mirror of
https://github.com/thepigeongenerator/mcaselector-lite.git
synced 2025-12-17 07:35:45 +01:00
add testing code
This commit is contained in:
18
test/src/main.c
Normal file
18
test/src/main.c
Normal 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
39
test/src/test.h
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user