cute optional macros for the main function of a test

This commit is contained in:
Gwendolyn 2022-01-03 15:21:26 +01:00
parent c6280ddf85
commit 88d3836926
10 changed files with 38 additions and 49 deletions

View file

@ -9,14 +9,12 @@ void example_groups();
void example_parameterized(); void example_parameterized();
void example_skip(); void example_skip();
XTEST_MAIN({
int main(int argc, char ** argv) { xtest_run_group(example_assertions);
xtest_run_group(example_assertions); xtest_run_group(example_expect_assertions);
xtest_run_group(example_expect_assertions); xtest_run_group(example_fail);
xtest_run_group(example_fail); xtest_run_group(example_float);
xtest_run_group(example_float); xtest_run_group(example_groups);
xtest_run_group(example_groups); xtest_run_group(example_parameterized);
xtest_run_group(example_parameterized); xtest_run_group(example_skip);
xtest_run_group(example_skip); })
return xtest_complete();
}

View file

@ -99,8 +99,5 @@ void example_assertions() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_assertions)
example_assertions(); #endif //XTEST_ALL_EXAMPLES
return xtest_complete();
}
#endif

View file

@ -39,8 +39,5 @@ void example_expect_assertions() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_expect_assertions)
example_expect_assertions(); #endif
return xtest_complete();
}
#endif

View file

@ -181,8 +181,5 @@ void example_fail() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_fail)
example_fail(); #endif
return xtest_complete();
}
#endif

View file

@ -39,8 +39,5 @@ void example_float() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_float)
example_float(); #endif
return xtest_complete();
}
#endif

View file

@ -96,8 +96,5 @@ void example_groups() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_groups)
example_groups(); #endif
return xtest_complete();
}
#endif

View file

@ -79,8 +79,5 @@ void example_parameterized() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_parameterized)
example_parameterized(); #endif
return xtest_complete();
}
#endif

View file

@ -54,8 +54,5 @@ void example_skip() {
} }
#ifndef XTEST_ALL_EXAMPLES #ifndef XTEST_ALL_EXAMPLES
int main(int argc, char **argv) { XTEST_RUN_MAIN(example_skip)
example_skip(); #endif
return xtest_complete();
}
#endif

View file

@ -1,5 +1,4 @@
#include <setjmp.h> #include <setjmp.h>
#include <math.h>
#define XTEST_SOURCE #define XTEST_SOURCE
@ -276,8 +275,10 @@ void
xtest_assert_float(double expected, double actual, int precision, int invert, const char *expression, const char *file, xtest_assert_float(double expected, double actual, int precision, int invert, const char *expression, const char *file,
int line) { int line) {
double epsilon = pow(10, -(precision)); double epsilon = 1.0;
double diff = fabs(expected - actual); for (int i = 0; i < precision; ++i) epsilon /= 10.0;
double diff = expected - actual;
if (diff < 0) diff = -diff;
int equals = diff < epsilon; int equals = diff < epsilon;
int failed = invert == equals; // invert = true: fail if equals, invert = false: fail if not equals int failed = invert == equals; // invert = true: fail if equals, invert = false: fail if not equals
if (!failed) return; if (!failed) return;

11
xtest.h
View file

@ -130,4 +130,15 @@ int xtest_complete();
#define xtest_assert_mem_is_not(actual, expected, len) xtest_assert_(memcmp(actual, expected, len) != 0, #actual " is not " #expected " (" #len " bytes)", NULL, NULL, 1) #define xtest_assert_mem_is_not(actual, expected, len) xtest_assert_(memcmp(actual, expected, len) != 0, #actual " is not " #expected " (" #len " bytes)", NULL, NULL, 1)
#define XTEST_RUN_MAIN(fn) int main(int argc, char ** argv) { \
fn(); \
return xtest_complete(); \
}
#define XTEST_MAIN(block) int main(int argc, char ** argv) { \
block \
return xtest_complete(); \
}
#endif //XTEST_XTEST_H #endif //XTEST_XTEST_H