From 9e7166a52e94d8e15bf2dbfe00026f21f76630a9 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Wed, 18 Oct 2023 12:49:39 -0600 Subject: [PATCH] oct 16, 18 notes. add unit tests with utest, and bisection root finding methods --- Makefile | 15 +- homeworks/hw-4.pdf | Bin 215081 -> 222879 bytes homeworks/hw-4.tex | 18 +- inc/lizfcm.h | 10 + inc/macros.h | 3 + notes/Oct-16.org | 77 ++ notes/Oct-18.org | 18 + src/matrix.c | 13 +- src/roots.c | 46 + src/vector.c | 11 + test/approx_derivative.t.c | 32 + test/lin.t.c | 20 + test/lizfcm.test.h | 7 + test/maceps.t.c | 18 + test/main.c | 125 +-- test/matrix.t.c | 96 +++ test/roots.t.c | 17 + test/utest.h | 1668 ++++++++++++++++++++++++++++++++++++ test/vector.t.c | 93 ++ 19 files changed, 2152 insertions(+), 135 deletions(-) create mode 100644 notes/Oct-16.org create mode 100644 notes/Oct-18.org create mode 100644 src/roots.c create mode 100644 test/approx_derivative.t.c create mode 100644 test/lin.t.c create mode 100644 test/lizfcm.test.h create mode 100644 test/maceps.t.c create mode 100644 test/matrix.t.c create mode 100644 test/roots.t.c create mode 100644 test/utest.h create mode 100644 test/vector.t.c diff --git a/Makefile b/Makefile index aed2e52..0b1a81a 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,12 @@ -TEST_SRC := test/main.c SRC_DIR := src OBJ_DIR := build BIN_DIR := dist LIB_DIR := lib +TEST_SRC_DIR := test +TEST_SRC := $(wildcard $(TEST_SRC_DIR)/*.c) +TEST_OBJ := $(TEST_SRC:$(TEST_SRC_DIR)/%.c=$(OBJ_DIR)/%.o) + TEST_EXE := $(BIN_DIR)/lizfcm.test EXE := $(BIN_DIR)/lizfcm LIBRARY := $(LIB_DIR)/lizfcm.a @@ -18,20 +21,26 @@ LDFLAGS := -lm all: $(TEST_EXE) -$(TEST_EXE): $(BIN_DIR) | $(LIBRARY) - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(TEST_SRC) $(LIBRARY) -o $@ +$(TEST_EXE): $(TEST_OBJ) $(LIBRARY) | $(BIN_DIR) + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LIBRARY): $(OBJ) | $(LIB_DIR) ar rcs $(LIBRARY) $(OBJ_DIR)/*.o ranlib $(LIBRARY) +$(OBJ_DIR)/%.o: $(TEST_SRC_DIR)/%.c | $(OBJ_DIR) + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ + $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR): mkdir -p $@ +print-% : ; @echo $* = $($*) + clean: @$(RM) -r $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) -include $(OBJ:.o=.d) +-include $(TEST_OBJ:.o=.d) diff --git a/homeworks/hw-4.pdf b/homeworks/hw-4.pdf index 8d515c71fb2a9d5a5b268df5eb0ea21deedca0ec..35176a1d9fa6e833ba18f2cab4a7880212fb9e25 100644 GIT binary patch delta 150196 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
dp7*u!90kz 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 delta 143009 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�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 i|HBJBULJm40bcU6XD_MAlm9;qOlS!J diff --git a/homeworks/hw-4.tex b/homeworks/hw-4.tex index a3667f5..7a83378 100644 --- a/homeworks/hw-4.tex +++ b/homeworks/hw-4.tex @@ -1,4 +1,4 @@ -% Created 2023-10-13 Fri 20:54 +% Created 2023-10-13 Fri 21:11 % Intended LaTeX compiler: pdflatex \documentclass[11pt]{article} \usepackage[utf8]{inputenc} @@ -29,17 +29,17 @@ \setlength\parindent{0pt} \section{Question 1} -\label{sec:org0ce46da} +\label{sec:orgf7348d4} See the attached LIZFCM Software Manual. \section{Question 2, 3, 4} -\label{sec:org0794d50} +\label{sec:orgaf52510} \begin{center} \includegraphics[width=350px]{./img/make_run.png} \end{center} \section{Question 5} -\label{sec:orgf7b84cc} +\label{sec:orgd0fe6e8} \begin{center} \includegraphics[width=350px]{./img/test_routine_1.png} \end{center} @@ -49,22 +49,22 @@ See the attached LIZFCM Software Manual. \end{center} \section{Question 6} -\label{sec:orgee1884d} +\label{sec:org9e2023c} See the LIZFCM Software Manual. \section{Question 7} -\label{sec:org6f86e09} +\label{sec:org6c11571} See \texttt{src/matrix.c -> lu\_decomp, fsubst, bsubst, solve\_matrix} \section{Question 8} -\label{sec:orga79c31e} +\label{sec:org9ba7792} See \texttt{test/main.c -> lines 109 - 113} in correspondence to the run in Question 5 \section{Question 9} -\label{sec:org5b1b74d} +\label{sec:org3cff888} See \texttt{test/main.c -> lines 118 - 121} in correspondence to the run in Question 5 \section{Question 10} -\label{sec:org7409683} +\label{sec:org522eabc} See the TOC on the first page of the LIZFCM Software Manual. \end{document} \ No newline at end of file diff --git a/inc/lizfcm.h b/inc/lizfcm.h index b254732..b59651e 100644 --- a/inc/lizfcm.h +++ b/inc/lizfcm.h @@ -27,6 +27,7 @@ extern double linf_distance(Array_double *v1, Array_double *v2); extern Array_double *copy_vector(Array_double *v1); extern void free_vector(Array_double *v); extern void format_vector_into(Array_double *v, char *s); +extern int vector_equal(Array_double *a, Array_double *b); extern Matrix_double *put_identity_diagonal(Matrix_double *m); extern Matrix_double **lu_decomp(Matrix_double *m); @@ -37,7 +38,16 @@ extern Array_double *m_dot_v(Matrix_double *m, Array_double *v); extern Matrix_double *copy_matrix(Matrix_double *m); extern void free_matrix(Matrix_double *m); extern void format_matrix_into(Matrix_double *m, char *s); +extern int matrix_equal(Matrix_double *a, Matrix_double *b); extern Line *least_squares_lin_reg(Array_double *x, Array_double *y); +extern double *find_ivt_range(double (*f)(double), double start_x, double delta, + size_t max_steps); +extern double bisect_find_root(double (*f)(double), double a, double b, + double tolerance, size_t max_iterations); +extern double bisect_find_root_with_error_assumption(double (*f)(double), + double a, double b, + double tolerance); + #endif // LIZFCM_H diff --git a/inc/macros.h b/inc/macros.h index f6e531e..eab1b41 100644 --- a/inc/macros.h +++ b/inc/macros.h @@ -52,4 +52,7 @@ #define c_max(x, y) (((x) >= (y)) ? (x) : (y)) #define c_min(x, y) (((x) <= (y)) ? (x) : (y)) +#define true 1; +#define false 0; + #endif // MACROS_H diff --git a/notes/Oct-16.org b/notes/Oct-16.org new file mode 100644 index 0000000..656b261 --- /dev/null +++ b/notes/Oct-16.org @@ -0,0 +1,77 @@ +Find x \in R st f(x) = 0 + +if f(x^*) = 0 then define x^* = g(x^*) = x^* + f(x^*) + +Suppose we approximate x^* by x_0. Then Using the fixed point equations: + +x_1 = g(x_0) = x_0 + f(x_0) +x_2 = g(g_1) \cdots x_{k+1} = g(x_k) + +This generates a sequence of approximations to x^* + +{X_k} \rightarrow x^* + +The algorithm is: Given f(x), x_0, compute x_{k+1} = g(x_k), k = 0, 1, 2, \cdots += x_k + f(x_k) + +Examples for g(x) + +1. x_{k+1} = x_k + f(x_k) +2. x_{k+1} = x_k - f(x_k) +3. x_{k+1} = x_k - mf(x_k) +4. x_{k+q} = s_k - sin(f(x_k)) + +x^* = root of f +y^* = solution of y^* = g(y^*) + +| x^* - y^* | = x^* - (y^* - f(y^*)) +|x_{k+1} - x^* | = | g(x_k) - g(x^*) | + = |g(x^*) + g'(x^k)(x_k - x^*) + \cdots) - g(x^*)| + = |g'(x^*)(x_k - x^*) + hot| + \leq | g'(x^*)(x_k - x^*)| + (pos val) + \leq |g'(x^*)| (|x_k - x^*|) + +\Rightarrow |x_{k+1} - x^*| \leq |g'(x^*)| \cdot |x_k - x^*| + +For this to converge, we need |g'(x^*)| \lt 1 + +* Example +f(x) = xe^{-x} + +Then x^* = 0 + +If we construct g(x) = 10x + xe^-x + +Then g'(x) = 10 + (e^-x - xe^-x) \Rightarrow g'(x) = 10 + e^0 - 0 = 11 (this wouldn't converge)n + +However if g(x)) = x - (xe^-x), g'(x) = 1 - (e^-x - xe^-x) \Rightarrow g'(x^*) = 0 + +Then assume x_0 = 1/10 +Then x_1 = g(x_0) = 1/10 - 1/10(e^{-1/10}) +\cdots + +* More General, Robust Algorithm +** Theorem: Intermediate Value Theorem +Suppose that f(x) is a continuous function on [a, b] then + +\lim_{x -> x_0} (f(x)) = f(x_0) + +For all x_0 \in (a, b) and at the endpoints: + +\lim_{a^+} f(x) = f(a) +\lim_{x -> b^-} f(x) = f(b) + +Then if s is a number between f(a) and f(b), there exists a point c \in (a, b) such that f(c) = s. + +To use this to ensure there is a root, we just take evaluations f(a) and f(b) that cross 0 + +So the condition we construct is: +f(a) \cdot f(b) \lt 0 + +** Next Step: compute the midpoint of [a, b] +c = 1/2 (a + b) + +do binary search on c by taking this midpoint and ensuring f(a) \cdot f(c) \lt 0 or f(c) \cdot f(b) \lt 0 is met, +choosing the correct interval + + diff --git a/notes/Oct-18.org b/notes/Oct-18.org new file mode 100644 index 0000000..0104164 --- /dev/null +++ b/notes/Oct-18.org @@ -0,0 +1,18 @@ +Error Analysis Of Bisection Root Finding: + +e_0 \le b - a = b_0 - a_0 +e_1 \le b_1 - a_1 = 1/2(b_0 - a_0) +e_2 \le b_2 - a_2 = 1/2(b_1 - a_1) = (1/2)^2(b_0 - a_0) +e_k \le b_k - a_k = 1/2(b_{k-1} - a_{k-1}) = \cdots = (1/2)^k (b_0 - a_0) + + +e_k \le (1/2)^k (b_0 - a_0) = tolerance +\Rightarrow log(1/2^k) + log(b_0 - a_0) = log(tolerance) +\Rightarrow k log(1/2) + log(tolerance) - log(b_0 - a_0) +\Rightarrow k log(1/2) = log(tolerance / (b_0 - a_0)) +\Rightarrow k \ge log(tolerance / (b_0 - a_0)) / log(1/2) + +The Bisection Method applied to an interval [a, b] for a continous function will reduce the error +each time through by at least one half. + +| x_{k+1} - x_k | \le 1/2|x_k - x^* | diff --git a/src/matrix.c b/src/matrix.c index ac4d138..5766d94 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -37,7 +37,7 @@ Matrix_double **lu_decomp(Matrix_double *m) { Matrix_double *u = copy_matrix(m); Matrix_double *l_empt = InitMatrixWithSize(double, m->rows, m->cols, 0.0); Matrix_double *l = put_identity_diagonal(l_empt); - free(l_empt); + free_matrix(l_empt); Matrix_double **u_l = malloc(sizeof(Matrix_double *) * 2); @@ -140,3 +140,14 @@ void format_matrix_into(Matrix_double *m, char *s) { } strcat(s, "\n"); } + +int matrix_equal(Matrix_double *a, Matrix_double *b) { + if (a->cols != b->cols || a->rows != b->rows) + return false; + + for (size_t y = 0; y < a->rows; ++y) + if (!vector_equal(a->data[y], b->data[y])) { + return false; + } + return true; +} diff --git a/src/roots.c b/src/roots.c new file mode 100644 index 0000000..de16adf --- /dev/null +++ b/src/roots.c @@ -0,0 +1,46 @@ +#include "lizfcm.h" +#include +#include + +// f is well defined at start_x + delta*n for all n on the integer range [0, +// max_steps] +double *find_ivt_range(double (*f)(double), double start_x, double delta, + size_t max_steps) { + double *range = malloc(sizeof(double) * 2); + + double a = start_x; + + while (f(a) * f(start_x) >= 0 && max_steps-- > 0) + a += delta; + + if (max_steps == 0 && f(a) * f(start_x) > 0) + return NULL; + + range[0] = start_x; + range[1] = a + delta; + return range; +} + +// f is continuous on [a, b] +double bisect_find_root(double (*f)(double), double a, double b, + double tolerance, size_t max_iterations) { + assert(a <= b); + // guarantee there's a root somewhere between a and b by IVT + assert(f(a) * f(b) < 0); + + double c = (1.0 / 2) * (a + b); + if (b - a < tolerance || max_iterations == 0) + return c; + if (f(a) * f(c) < 0) + return bisect_find_root(f, a, c, tolerance, max_iterations - 1); + return bisect_find_root(f, c, b, tolerance, max_iterations - 1); +} + +double bisect_find_root_with_error_assumption(double (*f)(double), double a, + double b, double tolerance) { + assert(a <= b); + + uint64_t max_iterations = + (uint64_t)ceil((log(tolerance) - log(b - a)) / log(1 / 2.0)); + return bisect_find_root(f, a, b, tolerance, max_iterations); +} diff --git a/src/vector.c b/src/vector.c index 4a6250c..3e4f62d 100644 --- a/src/vector.c +++ b/src/vector.c @@ -115,3 +115,14 @@ double sum_v(Array_double *v) { sum += v->data[i]; return sum; } + +int vector_equal(Array_double *a, Array_double *b) { + if (a->size != b->size) + return false; + + for (size_t i = 0; i < a->size; ++i) { + if (a->data[i] != b->data[i]) + return false; + } + return true; +} diff --git a/test/approx_derivative.t.c b/test/approx_derivative.t.c new file mode 100644 index 0000000..6bcac79 --- /dev/null +++ b/test/approx_derivative.t.c @@ -0,0 +1,32 @@ +#include "lizfcm.test.h" + +double f(double x) { return x * x; } + +double f_prime(double x) { return 2 * x; } + +double H = 0.0001; +double ACCEPTED_DERIVATIVE_ERROR = 0.0001; + +UTEST(derivative, central) { + double a = 3.0; + double expected = f_prime(a); + double f_prime_x = central_derivative_at(&f, a, H); + + EXPECT_NEAR(expected, f_prime_x, ACCEPTED_DERIVATIVE_ERROR); +} + +UTEST(derivative, forward) { + double a = 3.0; + double expected = f_prime(a); + double f_prime_x = forward_derivative_at(&f, a, H); + + EXPECT_NEAR(expected, f_prime_x, ACCEPTED_DERIVATIVE_ERROR); +} + +UTEST(derivative, backward) { + double a = 3.0; + double expected = f_prime(a); + double f_prime_x = backward_derivative_at(&f, a, H); + + EXPECT_NEAR(expected, f_prime_x, ACCEPTED_DERIVATIVE_ERROR); +} diff --git a/test/lin.t.c b/test/lin.t.c new file mode 100644 index 0000000..6ad1613 --- /dev/null +++ b/test/lin.t.c @@ -0,0 +1,20 @@ +#include "lizfcm.test.h" + +UTEST(Lin, least_squares_lin_reg_perfect) { + Array_double *x = InitArray(double, {0, 1, 2, 3, 4}); + Array_double *y = InitArray(double, {1, 2, 3, 4, 5}); + + Line *line = least_squares_lin_reg(x, y); + + EXPECT_EQ(line->m, 1.0); + EXPECT_EQ(line->a, 1.0); +} + +UTEST(Lin, least_squares_lin_reg_estimate) { + Array_double *x = InitArray(double, {1, 2, 3, 4, 5, 6, 7}); + Array_double *y = InitArray(double, {0.5, 3, 2, 3.5, 5, 6, 7.5}); + + Line *line = least_squares_lin_reg(x, y); + + EXPECT_NEAR(line->m, 1.0, 0.2); +} diff --git a/test/lizfcm.test.h b/test/lizfcm.test.h new file mode 100644 index 0000000..2374b83 --- /dev/null +++ b/test/lizfcm.test.h @@ -0,0 +1,7 @@ +#include "lizfcm.h" +#include "utest.h" + +#ifndef LIZFCM_TEST_H +#define LIZFCM_TEST_H + +#endif // LIZFCM_TEST_H diff --git a/test/maceps.t.c b/test/maceps.t.c new file mode 100644 index 0000000..9c45659 --- /dev/null +++ b/test/maceps.t.c @@ -0,0 +1,18 @@ +#include "lizfcm.test.h" +#include + +UTEST(maceps, smaceps) { + float epsilon = smaceps(); + float one = 1.0; + float approx_one = one + epsilon; + + EXPECT_LE(approx_one - one, 0); +} + +UTEST(maceps, dmaceps) { + double epsilon = dmaceps(); + double one = 1.0; + double approx_one = one + epsilon; + + EXPECT_LE(approx_one - one, 0); +} diff --git a/test/main.c b/test/main.c index d31c92b..5d16fe7 100644 --- a/test/main.c +++ b/test/main.c @@ -1,124 +1,5 @@ -#include "lizfcm.h" -#include -#include -#include +#include "lizfcm.test.h" -double f(double x) { return (x - 1) / (x + 1); } +UTEST(basic, unit_tests) { ASSERT_TRUE(1); } -int main() { - char s[2048]; - - printf("Basic Routines\n"); - printf("smaceps(): %.10e\n", smaceps()); - printf("dmaceps(): %.10e\n", dmaceps()); - printf("========\n"); - - printf("Norm, Distance\n"); - Array_double *v = InitArray(double, {3, 1, -4}); - strcpy(s, ""); - format_vector_into(v, s); - printf("v: %s", s); - - Array_double *w = InitArray(double, {-2, 7, 1}); - strcpy(s, ""); - format_vector_into(w, s); - printf("w: %s", s); - - printf("l1_norm(v): %f\n", l1_norm(v)); - printf("l2_norm(v): %f\n", l2_norm(v)); - printf("linf_norm(v): %f\n", linf_norm(v)); - printf("l1_dist(v, w): %f\n", l1_distance(v, w)); - printf("l2_dist(v, w): %f\n", l2_distance(v, w)); - printf("linf_dist(v, w): %f\n", linf_distance(v, w)); - printf("========\n"); - - double h = 0.001; - printf("Derivative Approxs\n"); - printf("f(x) = (x-1)/(x+1)\n"); - printf("approx f'(1) w/ c.d.: %f\n", central_derivative_at(&f, 1, h)); - printf("approx f'(1) w/ fw.d.: %f\n", forward_derivative_at(&f, 1, h)); - printf("approx f'(1) w/ bw.d.: %f\n", backward_derivative_at(&f, 1, h)); - printf("========\n"); - printf("Least Squares\n"); - - v = InitArray(double, {1, 2, 3, 4, 5}); - strcpy(s, ""); - format_vector_into(v, s); - printf("v: %s", s); - w = InitArray(double, {2, 3, 4, 5, 6}); - strcpy(s, ""); - format_vector_into(w, s); - printf("w: %s", s); - - Line *line = least_squares_lin_reg(v, w); - printf("least_squares_lin_reg(v, w): (%f)x + %f\n", line->m, line->a); - v = InitArray(double, {1, 2, 3, 4, 5, 6, 7}); - strcpy(s, ""); - format_vector_into(v, s); - printf("v: %s", s); - w = InitArray(double, {0.5, 3, 2, 3.5, 5, 6, 7.5}); - strcpy(s, ""); - format_vector_into(w, s); - printf("w: %s", s); - - line = least_squares_lin_reg(v, w); - printf("least_squares_lin_reg(v, w): (%f)x + %f\n", line->m, line->a); - free(line); - printf("========\n"); - - printf("LU Decomp\n"); - uint32_t n = 10; - Matrix_double *a = InitMatrixWithSize(double, n, n, 0.0); - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) - a->data[i]->data[j] = (100 - rand() % 200); - } - strcpy(s, ""); - format_matrix_into(a, s); - printf("a = %s", s); - - uint32_t solution = 1; - Array_double *y = InitArrayWithSize(double, n, (double)solution); - Array_double *b = m_dot_v(a, y); // q8 steps - Matrix_double **u_l = lu_decomp(a); - Matrix_double *u = u_l[0]; - Matrix_double *l = u_l[1]; - - strcpy(s, ""); - format_matrix_into(u, s); - printf("u = %s", s); - strcpy(s, ""); - format_matrix_into(l, s); - printf("l = %s", s); - strcpy(s, ""); - format_vector_into(b, s); - printf("(after following q8) b = %s", s); - printf("========\n"); - printf("Forward / Backward Substitution Solution to ax=b\n"); - - Array_double *b_fsub = fsubst(l, b); - strcpy(s, ""); - format_vector_into(b_fsub, s); - printf("b_fsub: %s", s); - - Array_double *x_bsub = bsubst(u, b_fsub); - strcpy(s, ""); - format_vector_into(x_bsub, s); - printf("x_bsub: %s", s); - - Array_double *x_solve_matrix = solve_matrix(a, b); - free_vector(b); - strcpy(s, ""); - format_vector_into(x_solve_matrix, s); - printf("\\--> == x_solve_matrix: %s", s); - - free_vector(b_fsub); - free_vector(x_solve_matrix); - - printf("Verifications\n"); - for (size_t i = 0; i < x_bsub->size; i++) - printf("in row %zu, solution = %f, true value err=%.10e\n", i, - x_bsub->data[i], fabs(x_bsub->data[i] - solution)); - - return 0; -} +UTEST_MAIN(); diff --git a/test/matrix.t.c b/test/matrix.t.c new file mode 100644 index 0000000..1def9ef --- /dev/null +++ b/test/matrix.t.c @@ -0,0 +1,96 @@ +#include "lizfcm.test.h" + +UTEST(matrix, free) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + uint64_t data_addr = (uint64_t)(m->data); + free_matrix(m); + EXPECT_NE(data_addr, (uint64_t)(m->data)); +} + +UTEST(matrix, put_identity_diagonal) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + Matrix_double *ident = put_identity_diagonal(m); + + for (size_t y = 0; y < m->rows; ++y) + for (size_t x = 0; x < m->cols; ++x) + EXPECT_EQ(ident->data[y]->data[x], x == y ? 1.0 : 0.0); + + free_matrix(m); + free_matrix(ident); +} + +UTEST(matrix, copy) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + Matrix_double *ident = put_identity_diagonal(m); + + Matrix_double *copy = copy_matrix(ident); + + EXPECT_TRUE(matrix_equal(ident, copy)); + + free_matrix(m); + free_matrix(ident); + free_matrix(copy); +} + +UTEST(matrix, m_dot_v) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + Matrix_double *ident = put_identity_diagonal(m); + + Array_double *x = InitArray(double, {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}); + Array_double *dotted = m_dot_v(ident, x); + + EXPECT_TRUE(vector_equal(dotted, x)); + + free_matrix(m); + free_matrix(ident); + free_vector(x); + free_vector(dotted); +} + +UTEST(matrix, lu_decomp) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + for (size_t y = 0; y < m->rows; ++y) { + for (size_t x = 0; x < m->cols; ++x) + m->data[y]->data[x] = x == y ? 5.0 : (5.0 - rand() % 10 + 1); + } + + Matrix_double **ul = lu_decomp(m); + Matrix_double *u = ul[0]; + Matrix_double *l = ul[1]; + for (int y = 0; y < m->rows; y++) { + for (size_t x = 0; x < c_max(y - 1, 0); x++) { + double u_yx = u->data[y]->data[x]; + EXPECT_NEAR(u_yx, 0.0, 0.0001); + } + + for (size_t x = c_min(m->cols, y + 1); x < m->cols; ++x) { + double l_yx = l->data[y]->data[x]; + EXPECT_NEAR(l_yx, 0.0, 0.0001); + } + } + + free_matrix(m); + free_matrix(l); + free_matrix(u); + free(ul); +} + +UTEST(matrix, solve_matrix) { + Matrix_double *m = InitMatrixWithSize(double, 8, 8, 0.0); + for (size_t y = 0; y < m->rows; ++y) { + for (size_t x = 0; x < m->cols; ++x) + m->data[y]->data[x] = x == y ? 10.0 : (5.0 - rand() % 10 + 1); + } + + Array_double *b = InitArray(double, {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}); + Array_double *solution = solve_matrix(m, b); + + for (size_t y = 0; y < m->rows; y++) { + double dot = v_dot_v(m->data[y], solution); + EXPECT_NEAR(b->data[y], dot, 0.0001); + } + + free_matrix(m); + free_vector(b); + free_vector(solution); +} diff --git a/test/roots.t.c b/test/roots.t.c new file mode 100644 index 0000000..632832a --- /dev/null +++ b/test/roots.t.c @@ -0,0 +1,17 @@ +#include "lizfcm.test.h" +#include + +double g(double x) { return x * x - 9; } + +UTEST(ivt, find_interval) { + double *range = find_ivt_range(&g, -100.0, 1.0, 200); + EXPECT_LT(g(range[0]) * g(range[1]), 0); + + free(range); +} + +UTEST(root, bisection_with_error_assumption) { + double root = bisect_find_root_with_error_assumption(&g, -5, 0, 0.01); + + EXPECT_NEAR(-3, root, 0.01); +} diff --git a/test/utest.h b/test/utest.h new file mode 100644 index 0000000..8767600 --- /dev/null +++ b/test/utest.h @@ -0,0 +1,1668 @@ +/* + The latest version of this library is available on GitHub; + https://github.com/sheredom/utest.h +*/ + +/* + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ + +#ifndef SHEREDOM_UTEST_H_INCLUDED +#define SHEREDOM_UTEST_H_INCLUDED + +#ifdef _MSC_VER +/* + Disable warning about not inlining 'inline' functions. +*/ +#pragma warning(disable : 4710) + +/* + Disable warning about inlining functions that are not marked 'inline'. +*/ +#pragma warning(disable : 4711) + +/* + Disable warning for alignment padding added +*/ +#pragma warning(disable : 4820) + +#if _MSC_VER > 1900 +/* + Disable warning about preprocessor macros not being defined in MSVC headers. +*/ +#pragma warning(disable : 4668) + +/* + Disable warning about no function prototype given in MSVC headers. +*/ +#pragma warning(disable : 4255) + +/* + Disable warning about pointer or reference to potentially throwing function. +*/ +#pragma warning(disable : 5039) + +/* + Disable warning about macro expansion producing 'defined' has undefined + behavior. +*/ +#pragma warning(disable : 5105) +#endif + +#if _MSC_VER > 1930 +/* + Disable warning about 'const' variable is not used. +*/ +#pragma warning(disable : 5264) +#endif + +#pragma warning(push, 1) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int64 utest_int64_t; +typedef unsigned __int64 utest_uint64_t; +typedef unsigned __int32 utest_uint32_t; +#else +#include +typedef int64_t utest_int64_t; +typedef uint64_t utest_uint64_t; +typedef uint32_t utest_uint32_t; +#endif + +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +#if defined(_MSC_VER) && !defined(_CPPUNWIND) +/* We're on MSVC and the compiler is compiling without exception support! */ +#elif !defined(_MSC_VER) && !defined(__EXCEPTIONS) +/* We're on a GCC/Clang compiler that doesn't have exception support! */ +#else +#define UTEST_HAS_EXCEPTIONS 1 +#endif +#endif + +#if defined(UTEST_HAS_EXCEPTIONS) +#include +#endif + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(__cplusplus) +#define UTEST_C_FUNC extern "C" +#else +#define UTEST_C_FUNC +#endif + +#define UTEST_TEST_PASSED (0) +#define UTEST_TEST_FAILURE (1) +#define UTEST_TEST_SKIPPED (2) + +#if defined(__TINYC__) +#define UTEST_ATTRIBUTE(a) __attribute((a)) +#else +#define UTEST_ATTRIBUTE(a) __attribute__((a)) +#endif + +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#endif + +#if defined(_WINDOWS_) || defined(_WINDOWS_H) +typedef LARGE_INTEGER utest_large_integer; +#else +// use old QueryPerformanceCounter definitions (not sure is this needed in some +// edge cases or not) on Win7 with VS2015 these extern declaration cause "second +// C linkage of overloaded function not allowed" error +typedef union { + struct { + unsigned long LowPart; + long HighPart; + } DUMMYSTRUCTNAME; + struct { + unsigned long LowPart; + long HighPart; + } u; + utest_int64_t QuadPart; +} utest_large_integer; + +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceCounter( + utest_large_integer *); +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceFrequency( + utest_large_integer *); + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic pop +#endif +#endif + +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) +/* + slightly obscure include here - we need to include glibc's features.h, but + we don't want to just include a header that might not be defined for other + c libraries like musl. Instead we include limits.h, which we know on all + glibc distributions includes features.h +*/ +#include + +#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) +#include + +#if ((2 < __GLIBC__) || ((2 == __GLIBC__) && (17 <= __GLIBC_MINOR__))) +/* glibc is version 2.17 or above, so we can just use clock_gettime */ +#define UTEST_USE_CLOCKGETTIME +#else +#include +#include +#endif +#else // Other libc implementations +#include +#define UTEST_USE_CLOCKGETTIME +#endif + +#elif defined(__APPLE__) +#include +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +#define UTEST_PRId64 "I64d" +#define UTEST_PRIu64 "I64u" +#else +#include + +#define UTEST_PRId64 PRId64 +#define UTEST_PRIu64 PRIu64 +#endif + +#if defined(__cplusplus) +#define UTEST_INLINE inline + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#define UTEST_INITIALIZER(f) \ + struct f##_cpp_struct { \ + f##_cpp_struct(); \ + }; \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS static f##_cpp_struct \ + f##_cpp_global UTEST_INITIALIZER_END_DISABLE_WARNINGS; \ + f##_cpp_struct::f##_cpp_struct() +#elif defined(_MSC_VER) +#define UTEST_INLINE __forceinline + +#if defined(_WIN64) +#define UTEST_SYMBOL_PREFIX +#else +#define UTEST_SYMBOL_PREFIX "_" +#endif + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wmissing-variable-declarations\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#pragma section(".CRT$XCU", read) +#define UTEST_INITIALIZER(f) \ + static void __cdecl f(void); \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + __pragma(comment(linker, "/include:" UTEST_SYMBOL_PREFIX #f "_")) \ + UTEST_C_FUNC __declspec(allocate(".CRT$XCU")) void(__cdecl * \ + f##_)(void) = f; \ + UTEST_INITIALIZER_END_DISABLE_WARNINGS \ + static void __cdecl f(void) +#else +#if defined(__linux__) +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#endif + +#define __STDC_FORMAT_MACROS 1 + +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic pop +#endif +#endif +#endif + +#define UTEST_INLINE inline + +#define UTEST_INITIALIZER(f) \ + static void f(void) UTEST_ATTRIBUTE(constructor); \ + static void f(void) +#endif + +#if defined(__cplusplus) +#define UTEST_CAST(type, x) static_cast(x) +#define UTEST_PTR_CAST(type, x) reinterpret_cast(x) +#define UTEST_EXTERN extern "C" +#define UTEST_NULL NULL +#else +#define UTEST_CAST(type, x) ((type)(x)) +#define UTEST_PTR_CAST(type, x) ((type)(x)) +#define UTEST_EXTERN extern +#define UTEST_NULL 0 +#endif + +#ifdef _MSC_VER +/* + io.h contains definitions for some structures with natural padding. This is + uninteresting, but for some reason MSVC's behaviour is to warn about + including this system header. That *is* interesting +*/ +#pragma warning(disable : 4820) +#pragma warning(push, 1) +#include +#pragma warning(pop) +#define UTEST_COLOUR_OUTPUT() (_isatty(_fileno(stdout))) +#else +#if defined(__EMSCRIPTEN__) +#include +#define UTEST_COLOUR_OUTPUT() false +#else +#include +#define UTEST_COLOUR_OUTPUT() (isatty(STDOUT_FILENO)) +#endif +#endif + +static UTEST_INLINE void *utest_realloc(void *const pointer, size_t new_size) { + void *const new_pointer = realloc(pointer, new_size); + + if (UTEST_NULL == new_pointer) { + free(new_pointer); + } + + return new_pointer; +} + +static UTEST_INLINE utest_int64_t utest_ns(void) { +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + utest_large_integer counter; + utest_large_integer frequency; + QueryPerformanceCounter(&counter); + QueryPerformanceFrequency(&frequency); + return UTEST_CAST(utest_int64_t, + (counter.QuadPart * 1000000000) / frequency.QuadPart); +#elif defined(__linux__) && defined(__STRICT_ANSI__) + return UTEST_CAST(utest_int64_t, clock()) * 1000000000 / CLOCKS_PER_SEC; +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) + struct timespec ts; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(__HAIKU__) + timespec_get(&ts, TIME_UTC); +#else + const clockid_t cid = CLOCK_REALTIME; +#if defined(UTEST_USE_CLOCKGETTIME) + clock_gettime(cid, &ts); +#else + syscall(SYS_clock_gettime, cid, &ts); +#endif +#endif + return UTEST_CAST(utest_int64_t, ts.tv_sec) * 1000 * 1000 * 1000 + ts.tv_nsec; +#elif __APPLE__ + return UTEST_CAST(utest_int64_t, clock_gettime_nsec_np(CLOCK_UPTIME_RAW)); +#elif __EMSCRIPTEN__ + return emscripten_performance_now() * 1000000.0; +#else +#error Unsupported platform! +#endif +} + +typedef void (*utest_testcase_t)(int *, size_t); + +struct utest_test_state_s { + utest_testcase_t func; + size_t index; + char *name; +}; + +struct utest_state_s { + struct utest_test_state_s *tests; + size_t tests_length; + FILE *output; +}; + +/* extern to the global state utest needs to execute */ +UTEST_EXTERN struct utest_state_s utest_state; + +#if defined(_MSC_VER) +#define UTEST_WEAK __forceinline +#elif defined(__MINGW32__) || defined(__MINGW64__) +#define UTEST_WEAK static UTEST_ATTRIBUTE(used) +#elif defined(__clang__) || defined(__GNUC__) || defined(__TINYC__) +#define UTEST_WEAK UTEST_ATTRIBUTE(weak) +#else +#error Non clang, non gcc, non MSVC, non tcc compiler found! +#endif + +#if defined(_MSC_VER) +#define UTEST_UNUSED +#else +#define UTEST_UNUSED UTEST_ATTRIBUTE(unused) +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#define UTEST_PRINTF(...) \ + if (utest_state.output) { \ + fprintf(utest_state.output, __VA_ARGS__); \ + } \ + printf(__VA_ARGS__) +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#ifdef _MSC_VER +#define UTEST_SNPRINTF(BUFFER, N, ...) _snprintf_s(BUFFER, N, N, __VA_ARGS__) +#else +#define UTEST_SNPRINTF(...) snprintf(__VA_ARGS__) +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__cplusplus) +/* if we are using c++ we can use overloaded methods (its in the language) */ +#define UTEST_OVERLOADABLE +#elif defined(__clang__) +/* otherwise, if we are using clang with c - use the overloadable attribute */ +#define UTEST_OVERLOADABLE UTEST_ATTRIBUTE(overloadable) +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#include + +template ::value> +struct utest_type_deducer final { + static void _(const T t); +}; + +template <> struct utest_type_deducer { + static void _(const signed char c) { + UTEST_PRINTF("%d", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned char c) { + UTEST_PRINTF("%u", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const short s) { UTEST_PRINTF("%d", static_cast(s)); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned short s) { + UTEST_PRINTF("%u", static_cast(s)); + } +}; + +template <> struct utest_type_deducer { + static void _(const float f) { UTEST_PRINTF("%f", static_cast(f)); } +}; + +template <> struct utest_type_deducer { + static void _(const double d) { UTEST_PRINTF("%f", d); } +}; + +template <> struct utest_type_deducer { + static void _(const long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif + } +}; + +template <> struct utest_type_deducer { + static void _(const int i) { UTEST_PRINTF("%d", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned int i) { UTEST_PRINTF("%u", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long i) { UTEST_PRINTF("%ld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long i) { UTEST_PRINTF("%lu", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long long i) { UTEST_PRINTF("%lld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long long i) { UTEST_PRINTF("%llu", i); } +}; + +template struct utest_type_deducer { + static void _(const T *t) { + UTEST_PRINTF("%p", static_cast(const_cast(t))); + } +}; + +template struct utest_type_deducer { + static void _(T *t) { UTEST_PRINTF("%p", static_cast(t)); } +}; + +template struct utest_type_deducer { + static void _(const T t) { + UTEST_PRINTF("%llu", static_cast(t)); + } +}; + +template +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const T t) { + utest_type_deducer::_(t); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#elif defined(UTEST_OVERLOADABLE) + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c) { + UTEST_PRINTF("%d", UTEST_CAST(int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c) { + UTEST_PRINTF("%u", UTEST_CAST(unsigned int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f) { + UTEST_PRINTF("%f", UTEST_CAST(double, f)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d) { + UTEST_PRINTF("%f", d); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i) { + UTEST_PRINTF("%d", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i) { + UTEST_PRINTF("%u", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i) { + UTEST_PRINTF("%ld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i) { + UTEST_PRINTF("%lu", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p) { + UTEST_PRINTF("%p", p); +} + +/* + long long is a c++11 extension +*/ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || \ + defined(__cplusplus) && (__cplusplus >= 201103L) || \ + (defined(__MINGW32__) || defined(__MINGW64__)) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i) { + UTEST_PRINTF("%lld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void +utest_type_printer(long long unsigned int i) { + UTEST_PRINTF("%llu", i); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !(defined(__MINGW32__) || defined(__MINGW64__)) || \ + defined(__TINYC__) +#define utest_type_printer(val) \ + UTEST_PRINTF(_Generic((val), signed char \ + : "%d", unsigned char \ + : "%u", short \ + : "%d", unsigned short \ + : "%u", int \ + : "%d", long \ + : "%ld", long long \ + : "%lld", unsigned \ + : "%u", unsigned long \ + : "%lu", unsigned long long \ + : "%llu", float \ + : "%f", double \ + : "%f", long double \ + : "%Lf", default \ + : _Generic((val - val), ptrdiff_t \ + : "%p", default \ + : "undef")), \ + (val)) +#else +/* + we don't have the ability to print the values we got, so we create a macro + to tell our users we can't do anything fancy +*/ +#define utest_type_printer(...) UTEST_PRINTF("undef") +#endif + +#if defined(_MSC_VER) +#define UTEST_SURPRESS_WARNING_BEGIN \ + __pragma(warning(push)) __pragma(warning(disable : 4127)) \ + __pragma(warning(disable : 4571)) __pragma(warning(disable : 4130)) +#define UTEST_SURPRESS_WARNING_END __pragma(warning(pop)) +#else +#define UTEST_SURPRESS_WARNING_BEGIN +#define UTEST_SURPRESS_WARNING_END +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) +#define UTEST_AUTO(x) auto +#elif !defined(__cplusplus) + +#if defined(__clang__) +/* clang-format off */ +/* had to disable clang-format here because it malforms the pragmas */ +#define UTEST_AUTO(x) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wgnu-auto-type\"") __auto_type \ + _Pragma("clang diagnostic pop") +/* clang-format on */ +#else +#define UTEST_AUTO(x) __typeof__(x + 0) +#endif + +#else +#define UTEST_AUTO(x) typeof(x + 0) +#endif + +#if defined(__clang__) +#define UTEST_STRNCMP(x, y, size) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"") \ + strncmp(x, y, size) _Pragma("clang diagnostic pop") +#else +#define UTEST_STRNCMP(x, y, size) strncmp(x, y, size) +#endif + +#if defined(_MSC_VER) +#define UTEST_STRNCPY(x, y, size) strcpy_s(x, size, y) +#elif !defined(__clang__) && defined(__GNUC__) +static UTEST_INLINE char * +utest_strncpy_gcc(char *const dst, const char *const src, const size_t size) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" + return strncpy(dst, src, size); +#pragma GCC diagnostic pop +} + +#define UTEST_STRNCPY(x, y, size) utest_strncpy_gcc(x, y, size) +#else +#define UTEST_STRNCPY(x, y, size) strncpy(x, y, size) +#endif + +#define UTEST_SKIP(msg) \ + do { \ + UTEST_PRINTF(" Skipped : '%s'\n", (msg)); \ + *utest_result = UTEST_TEST_SKIPPED; \ + return; \ + } while (0) + +#if defined(__clang__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wlanguage-extension-token\"") \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") \ + _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + _Pragma("clang diagnostic pop") \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#elif defined(__GNUC__) || defined(__TINYC__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#else +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + if (!((x)cond(y))) { \ + UTEST_PRINTF("%s:%i: Failure (Expected " #cond " Actual)", __FILE__, \ + __LINE__); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s", msg); \ + } \ + UTEST_PRINTF("\n"); \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#endif + +#define EXPECT_EQ(x, y) UTEST_COND(x, y, ==, "", 0) +#define EXPECT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 0) +#define ASSERT_EQ(x, y) UTEST_COND(x, y, ==, "", 1) +#define ASSERT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 1) + +#define EXPECT_NE(x, y) UTEST_COND(x, y, !=, "", 0) +#define EXPECT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 0) +#define ASSERT_NE(x, y) UTEST_COND(x, y, !=, "", 1) +#define ASSERT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 1) + +#define EXPECT_LT(x, y) UTEST_COND(x, y, <, "", 0) +#define EXPECT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 0) +#define ASSERT_LT(x, y) UTEST_COND(x, y, <, "", 1) +#define ASSERT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 1) + +#define EXPECT_LE(x, y) UTEST_COND(x, y, <=, "", 0) +#define EXPECT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 0) +#define ASSERT_LE(x, y) UTEST_COND(x, y, <=, "", 1) +#define ASSERT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 1) + +#define EXPECT_GT(x, y) UTEST_COND(x, y, >, "", 0) +#define EXPECT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 0) +#define ASSERT_GT(x, y) UTEST_COND(x, y, >, "", 1) +#define ASSERT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 1) + +#define EXPECT_GE(x, y) UTEST_COND(x, y, >=, "", 0) +#define EXPECT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 0) +#define ASSERT_GE(x, y) UTEST_COND(x, y, >=, "", 1) +#define ASSERT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 1) + +#define UTEST_TRUE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (!(xEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : true\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_TRUE(x) UTEST_TRUE(x, "", 0) +#define EXPECT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 0) +#define ASSERT_TRUE(x) UTEST_TRUE(x, "", 1) +#define ASSERT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 1) + +#define UTEST_FALSE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (xEval) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : false\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_FALSE(x) UTEST_FALSE(x, "", 0) +#define EXPECT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 0) +#define ASSERT_FALSE(x) UTEST_FALSE(x, "", 1) +#define ASSERT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 1) + +#define UTEST_STREQ(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STREQ(x, y) UTEST_STREQ(x, y, "", 0) +#define EXPECT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 0) +#define ASSERT_STREQ(x, y) UTEST_STREQ(x, y, "", 1) +#define ASSERT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 1) + +#define UTEST_STRNE(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNE(x, y) UTEST_STRNE(x, y, "", 0) +#define EXPECT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 0) +#define ASSERT_STRNE(x, y) UTEST_STRNE(x, y, "", 1) +#define ASSERT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 1) + +#define UTEST_STRNEQ(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 0) +#define EXPECT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 0) +#define ASSERT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 1) +#define ASSERT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 1) + +#define UTEST_STRNNE(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 0) +#define EXPECT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 0) +#define ASSERT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 1) +#define ASSERT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 1) + +#define UTEST_NEAR(x, y, epsilon, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const double diff = \ + utest_fabs(UTEST_CAST(double, x) - UTEST_CAST(double, y)); \ + if (diff > UTEST_CAST(double, epsilon) || utest_isnan(diff)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %f\n", UTEST_CAST(double, x)); \ + UTEST_PRINTF(" Actual : %f\n", UTEST_CAST(double, y)); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 0) +#define EXPECT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 0) +#define ASSERT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 1) +#define ASSERT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 1) + +#if defined(UTEST_HAS_EXCEPTIONS) +#define UTEST_EXCEPTION(x, exception_type, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + try { \ + x; \ + } catch (const exception_type &) { \ + exception_caught = 1; \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 0) +#define EXPECT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 0) +#define ASSERT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 1) +#define ASSERT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 1) + +#define UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, \ + msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + char *message_caught = UTEST_NULL; \ + try { \ + x; \ + } catch (const exception_type &e) { \ + const char *const what = e.what(); \ + exception_caught = 1; \ + if (0 != \ + UTEST_STRNCMP(what, exception_message, strlen(exception_message))) { \ + const size_t message_size = strlen(what) + 1; \ + message_caught = UTEST_PTR_CAST(char *, malloc(message_size)); \ + UTEST_STRNCPY(message_caught, what, message_size); \ + } \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } else if (UTEST_NULL != message_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception with message %s\n", \ + #exception_type, exception_message); \ + UTEST_PRINTF(" Actual message : %s\n", message_caught); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + free(message_caught); \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 0) +#define EXPECT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 0) +#define ASSERT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 1) +#define ASSERT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 1) +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wunsafe-buffer-usage\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("clang diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif +#elif defined(__GNUC__) && __GNUC__ >= 8 && defined(__cplusplus) +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wclass-memaccess\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("GCC diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif + +#define UTEST(SET, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##SET##_##NAME(int *utest_result); \ + static void utest_##SET##_##NAME(int *utest_result, size_t utest_index) { \ + (void)utest_index; \ + utest_run_##SET##_##NAME(utest_result); \ + } \ + UTEST_INITIALIZER(utest_register_##SET##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #SET "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_##SET##_##NAME; \ + utest_state.tests[index].name = name; \ + utest_state.tests[index].index = 0; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##SET##_##NAME(int *utest_result) + +#define UTEST_F_SETUP(FIXTURE) \ + static void utest_f_setup_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F_TEARDOWN(FIXTURE) \ + static void utest_f_teardown_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F(FIXTURE, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_f_setup_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_f_teardown_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_run_##FIXTURE##_##NAME(int *, struct FIXTURE *); \ + static void utest_f_##FIXTURE##_##NAME(int *utest_result, \ + size_t utest_index) { \ + struct FIXTURE fixture; \ + (void)utest_index; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_f_setup_##FIXTURE(utest_result, &fixture); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME(utest_result, &fixture); \ + utest_f_teardown_##FIXTURE(utest_result, &fixture); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_f_##FIXTURE##_##NAME; \ + utest_state.tests[index].name = name; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_I_SETUP(FIXTURE) \ + static void utest_i_setup_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I_TEARDOWN(FIXTURE) \ + static void utest_i_teardown_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I(FIXTURE, NAME, INDEX) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##FIXTURE##_##NAME##_##INDEX(int *, struct FIXTURE *); \ + static void utest_i_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + size_t index) { \ + struct FIXTURE fixture; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_i_setup_##FIXTURE(utest_result, &fixture, index); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME##_##INDEX(utest_result, &fixture); \ + utest_i_teardown_##FIXTURE(utest_result, &fixture, index); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME##_##INDEX) { \ + size_t i; \ + utest_uint64_t iUp; \ + for (i = 0; i < (INDEX); i++) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 32; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_i_##FIXTURE##_##NAME##_##INDEX; \ + utest_state.tests[index].index = i; \ + utest_state.tests[index].name = name; \ + iUp = UTEST_CAST(utest_uint64_t, i); \ + UTEST_SNPRINTF(name, name_size, "%s/%" UTEST_PRIu64, name_part, iUp); \ + } else if (name) { \ + free(name); \ + } \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK +double utest_fabs(double d); +UTEST_WEAK +double utest_fabs(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.d; +} + +UTEST_WEAK +int utest_isnan(double d); +UTEST_WEAK +int utest_isnan(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.u > 0x7ff0000000000000u; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +UTEST_WEAK +int utest_should_filter_test(const char *filter, const char *testcase); +UTEST_WEAK int utest_should_filter_test(const char *filter, + const char *testcase) { + if (filter) { + const char *filter_cur = filter; + const char *testcase_cur = testcase; + const char *filter_wildcard = UTEST_NULL; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* store the position of the wildcard */ + filter_wildcard = filter_cur; + + /* skip the wildcard character */ + filter_cur++; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* + we found another wildcard (filter is something like *foo*) so we + exit the current loop, and return to the parent loop to handle + the wildcard case + */ + break; + } else if (*filter_cur != *testcase_cur) { + /* otherwise our filter didn't match, so reset it */ + filter_cur = filter_wildcard; + } + + /* move testcase along */ + testcase_cur++; + + /* move filter along */ + filter_cur++; + } + + if (('\0' == *filter_cur) && ('\0' == *testcase_cur)) { + return 0; + } + + /* if the testcase has been exhausted, we don't have a match! */ + if ('\0' == *testcase_cur) { + return 1; + } + } else { + if (*testcase_cur != *filter_cur) { + /* test case doesn't match filter */ + return 1; + } else { + /* move our filter and testcase forward */ + testcase_cur++; + filter_cur++; + } + } + } + + if (('\0' != *filter_cur) || + (('\0' != *testcase_cur) && + ((filter == filter_cur) || ('*' != filter_cur[-1])))) { + /* we have a mismatch! */ + return 1; + } + } + + return 0; +} + +static UTEST_INLINE FILE *utest_fopen(const char *filename, const char *mode) { +#ifdef _MSC_VER + FILE *file; + if (0 == fopen_s(&file, filename, mode)) { + return file; + } else { + return UTEST_NULL; + } +#else + return fopen(filename, mode); +#endif +} + +static UTEST_INLINE int utest_main(int argc, const char *const argv[]); +int utest_main(int argc, const char *const argv[]) { + utest_uint64_t failed = 0; + utest_uint64_t skipped = 0; + size_t index = 0; + size_t *failed_testcases = UTEST_NULL; + size_t failed_testcases_length = 0; + size_t *skipped_testcases = UTEST_NULL; + size_t skipped_testcases_length = 0; + const char *filter = UTEST_NULL; + utest_uint64_t ran_tests = 0; + int enable_mixed_units = 0; + int random_order = 0; + utest_uint32_t seed = 0; + + enum colours { RESET, GREEN, RED, YELLOW }; + + const int use_colours = UTEST_COLOUR_OUTPUT(); + const char *colours[] = {"\033[0m", "\033[32m", "\033[31m", "\033[33m"}; + + if (!use_colours) { + for (index = 0; index < sizeof colours / sizeof colours[0]; index++) { + colours[index] = ""; + } + } + /* loop through all arguments looking for our options */ + for (index = 1; index < UTEST_CAST(size_t, argc); index++) { + /* Informational switches */ + const char help_str[] = "--help"; + const char list_str[] = "--list-tests"; + /* Test config switches */ + const char filter_str[] = "--filter="; + const char output_str[] = "--output="; + const char enable_mixed_units_str[] = "--enable-mixed-units"; + const char random_order_str[] = "--random-order"; + const char random_order_with_seed_str[] = "--random-order="; + + if (0 == UTEST_STRNCMP(argv[index], help_str, strlen(help_str))) { + printf("utest.h - the single file unit testing solution for C/C++!\n" + "Command line Options:\n" + " --help Show this message and exit.\n" + " --filter= Filter the test cases to run (EG. " + "MyTest*.a would run MyTestCase.a but not MyTestCase.b).\n" + " --list-tests List testnames, one per line. Output " + "names can be passed to --filter.\n"); + printf(" --output= Output an xunit XML file to the file " + "specified in .\n" + " --enable-mixed-units Enable the per-test output to contain " + "mixed units (s/ms/us/ns).\n" + " --random-order[=] Randomize the order that the tests are " + "ran in. If the optional argument is not provided, then a " + "random starting seed is used.\n"); + goto cleanup; + } else if (0 == + UTEST_STRNCMP(argv[index], filter_str, strlen(filter_str))) { + /* user wants to filter what test cases run! */ + filter = argv[index] + strlen(filter_str); + } else if (0 == + UTEST_STRNCMP(argv[index], output_str, strlen(output_str))) { + utest_state.output = utest_fopen(argv[index] + strlen(output_str), "w+"); + } else if (0 == UTEST_STRNCMP(argv[index], list_str, strlen(list_str))) { + for (index = 0; index < utest_state.tests_length; index++) { + UTEST_PRINTF("%s\n", utest_state.tests[index].name); + } + /* when printing the test list, don't actually run the tests */ + return 0; + } else if (0 == UTEST_STRNCMP(argv[index], enable_mixed_units_str, + strlen(enable_mixed_units_str))) { + enable_mixed_units = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_with_seed_str, + strlen(random_order_with_seed_str))) { + seed = + UTEST_CAST(utest_uint32_t, + strtoul(argv[index] + strlen(random_order_with_seed_str), + UTEST_NULL, 10)); + random_order = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_str, + strlen(random_order_str))) { + const utest_int64_t ns = utest_ns(); + + // Some really poor pseudo-random using the current time. I do this + // because I really want to avoid using C's rand() because that'd mean our + // random would be affected by any srand() usage by the user (which I + // don't want). + seed = UTEST_CAST(utest_uint32_t, ns >> 32) * 31 + + UTEST_CAST(utest_uint32_t, ns & 0xffffffff); + random_order = 1; + } + } + + if (random_order) { + // Use Fisher-Yates with the Durstenfield's version to randomly re-order the + // tests. + for (index = utest_state.tests_length; index > 1; index--) { + // For the random order we'll use PCG. + const utest_uint32_t state = seed; + const utest_uint32_t word = + ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + const utest_uint32_t next = + ((word >> 22u) ^ word) % UTEST_CAST(utest_uint32_t, index); + + // Swap the randomly chosen element into the last location. + const struct utest_test_state_s copy = utest_state.tests[index - 1]; + utest_state.tests[index - 1] = utest_state.tests[next]; + utest_state.tests[next] = copy; + + // Move the seed onwards. + seed = seed * 747796405u + 2891336453u; + } + } + + for (index = 0; index < utest_state.tests_length; index++) { + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + ran_tests++; + } + + printf("%s[==========]%s Running %" UTEST_PRIu64 " test cases.\n", + colours[GREEN], colours[RESET], UTEST_CAST(utest_uint64_t, ran_tests)); + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + } + + for (index = 0; index < utest_state.tests_length; index++) { + int result = UTEST_TEST_PASSED; + utest_int64_t ns = 0; + + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + printf("%s[ RUN ]%s %s\n", colours[GREEN], colours[RESET], + utest_state.tests[index].name); + + if (utest_state.output) { + fprintf(utest_state.output, "", + utest_state.tests[index].name); + } + + ns = utest_ns(); + errno = 0; +#if defined(UTEST_HAS_EXCEPTIONS) + UTEST_SURPRESS_WARNING_BEGIN + try { + utest_state.tests[index].func(&result, utest_state.tests[index].index); + } catch (const std::exception &err) { + printf(" Exception : %s\n", err.what()); + result = UTEST_TEST_FAILURE; + } catch (...) { + printf(" Exception : Unknown\n"); + result = UTEST_TEST_FAILURE; + } + UTEST_SURPRESS_WARNING_END +#else + utest_state.tests[index].func(&result, utest_state.tests[index].index); +#endif + ns = utest_ns() - ns; + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + } + + // Record the failing test. + if (UTEST_TEST_FAILURE == result) { + const size_t failed_testcase_index = failed_testcases_length++; + failed_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, failed_testcases), + sizeof(size_t) * failed_testcases_length)); + if (UTEST_NULL != failed_testcases) { + failed_testcases[failed_testcase_index] = index; + } + failed++; + } else if (UTEST_TEST_SKIPPED == result) { + const size_t skipped_testcase_index = skipped_testcases_length++; + skipped_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, skipped_testcases), + sizeof(size_t) * skipped_testcases_length)); + if (UTEST_NULL != skipped_testcases) { + skipped_testcases[skipped_testcase_index] = index; + } + skipped++; + } + + { + const char *const units[] = {"ns", "us", "ms", "s", UTEST_NULL}; + unsigned int unit_index = 0; + utest_int64_t time = ns; + + if (enable_mixed_units) { + for (unit_index = 0; UTEST_NULL != units[unit_index]; unit_index++) { + if (10000 > time) { + break; + } + + time /= 1000; + } + } + + if (UTEST_TEST_FAILURE == result) { + printf("%s[ FAILED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[RED], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else if (UTEST_TEST_SKIPPED == result) { + printf("%s[ SKIPPED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[YELLOW], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else { + printf("%s[ OK ]%s %s (%" UTEST_PRId64 "%s)\n", colours[GREEN], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } + } + } + + printf("%s[==========]%s %" UTEST_PRIu64 " test cases ran.\n", colours[GREEN], + colours[RESET], ran_tests); + printf("%s[ PASSED ]%s %" UTEST_PRIu64 " tests.\n", colours[GREEN], + colours[RESET], ran_tests - failed - skipped); + + if (0 != skipped) { + printf("%s[ SKIPPED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[YELLOW], colours[RESET], skipped); + for (index = 0; index < skipped_testcases_length; index++) { + printf("%s[ SKIPPED ]%s %s\n", colours[YELLOW], colours[RESET], + utest_state.tests[skipped_testcases[index]].name); + } + } + + if (0 != failed) { + printf("%s[ FAILED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[RED], colours[RESET], failed); + for (index = 0; index < failed_testcases_length; index++) { + printf("%s[ FAILED ]%s %s\n", colours[RED], colours[RESET], + utest_state.tests[failed_testcases[index]].name); + } + } + + if (utest_state.output) { + fprintf(utest_state.output, "\n\n"); + } + +cleanup: + for (index = 0; index < utest_state.tests_length; index++) { + free(UTEST_PTR_CAST(void *, utest_state.tests[index].name)); + } + + free(UTEST_PTR_CAST(void *, skipped_testcases)); + free(UTEST_PTR_CAST(void *, failed_testcases)); + free(UTEST_PTR_CAST(void *, utest_state.tests)); + + if (utest_state.output) { + fclose(utest_state.output); + } + + return UTEST_CAST(int, failed); +} + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic pop +#endif +#endif + +/* + we need, in exactly one source file, define the global struct that will hold + the data we need to run utest. This macro allows the user to declare the + data without having to use the UTEST_MAIN macro, thus allowing them to write + their own main() function. +*/ +#define UTEST_STATE() struct utest_state_s utest_state = {0, 0, 0} + +/* + define a main() function to call into utest.h and start executing tests! A + user can optionally not use this macro, and instead define their own main() + function and manually call utest_main. The user must, in exactly one source + file, use the UTEST_STATE macro to declare a global struct variable that + utest requires. +*/ +#define UTEST_MAIN() \ + UTEST_STATE(); \ + int main(int argc, const char *const argv[]) { \ + return utest_main(argc, argv); \ + } + +#endif /* SHEREDOM_UTEST_H_INCLUDED */ diff --git a/test/vector.t.c b/test/vector.t.c new file mode 100644 index 0000000..5dc8ba9 --- /dev/null +++ b/test/vector.t.c @@ -0,0 +1,93 @@ +#include "lizfcm.test.h" +#include + +UTEST(vector, copy_vector) { + Array_double *v = InitArray(double, {3, 1, -4}); + Array_double *w = copy_vector(v); + EXPECT_TRUE(vector_equal(v, w)); + + free_vector(v); + free_vector(w); +} + +UTEST(vector, free_vector) { + Array_double *v = InitArray(double, {3, 1, -4}); + uint64_t arr_addr = (uint64_t)v->data; + free_vector(v); + EXPECT_NE((uint64_t)v->data, arr_addr); +} + +UTEST(vector, sum_vector) { + Array_double *v = InitArray(double, {3, 1, -4}); + EXPECT_EQ(0.0, sum_v(v)); + free_vector(v); +} + +UTEST(vector, add_v) { + Array_double *a = InitArray(double, {1.0, 3.0, -4.0}); + Array_double *b = InitArray(double, {2.0, -1.0, 0}); + Array_double *expected_sum = InitArray(double, {3.0, 2.0, -4.0}); + Array_double *sum = add_v(a, b); + + EXPECT_TRUE(vector_equal(sum, expected_sum)); + + free_vector(a); + free_vector(b); + free_vector(expected_sum); + free_vector(sum); +} + +UTEST(vector, minus_v) { + Array_double *a = InitArray(double, {1.0, 3.0, -4.0}); + Array_double *b = InitArray(double, {2.0, -1.0, 0}); + Array_double *expected_sub = InitArray(double, {-1.0, 4.0, -4.0}); + Array_double *sub = minus_v(a, b); + + EXPECT_TRUE(vector_equal(sub, expected_sub)); + + free_vector(a); + free_vector(b); + free_vector(expected_sub); + free_vector(sub); +} + +UTEST(vector, scale_v) { + double factor = 3.0; + Array_double *a = InitArray(double, {1.0, 3.0, -4.0}); + Array_double *expected_scaled = InitArray(double, {3.0, 9.0, -12.0}); + Array_double *scaled = scale_v(a, factor); + + EXPECT_TRUE(vector_equal(scaled, expected_scaled)); + + free_vector(a); + free_vector(expected_scaled); + free_vector(scaled); +} + +UTEST(vector, l1_norm) { + Array_double *v = InitArray(double, {3, 1, -4}); + EXPECT_EQ(l1_norm(v), 8.0); + free_vector(v); +} + +UTEST(vector, l2_norm) { + Array_double *v = InitArray(double, {3, 1, -4}); + EXPECT_EQ(l2_norm(v), sqrt(3 * 3 + 1 * 1 + 4 * 4)); + free_vector(v); +} + +UTEST(vector, linf_norm) { + Array_double *v = InitArray(double, {3, 1, -4}); + EXPECT_EQ(linf_norm(v), c_max(c_max(3.0, 1.0), -4.0)); + free_vector(v); +} + +UTEST(vector, vector_distance) { + Array_double *v = InitArray(double, {3, 1, -4}); + Array_double *w = InitArray(double, {3, 1, -4}); + Array_double *minus = minus_v(v, w); + EXPECT_EQ(vector_distance(v, w, &l2_norm), l2_norm(minus)); + free_vector(v); + free_vector(w); + free_vector(minus); +}