diff --git a/practical_work/tp_vec2/vec2/vec_tests.c b/practical_work/tp_vec2/vec2/vec_tests.c index 19523ade27341f129038be1fcc74336771eab2dc..fd5217fb8fafbb9a58aa935b380776b72c24e0a0 100644 --- a/practical_work/tp_vec2/vec2/vec_tests.c +++ b/practical_work/tp_vec2/vec2/vec_tests.c @@ -3,26 +3,31 @@ #include <stdbool.h> #include <stdio.h> -typedef struct _test_result { +typedef struct _test_result +{ bool passed; const char *name; } test_result; typedef test_result (*unit_test_t)(void); -void print_in_color(char *color, char *text) { +void print_in_color(char *color, char *text) +{ printf("\033%s", color); printf("%s", text); printf("\033[0m"); } -void print_in_red(char *text) { +void print_in_red(char *text) +{ print_in_color("[0;31m", text); } -void print_in_green(char *text) { +void print_in_green(char *text) +{ print_in_color("[0;32m", text); } -bool dbl_eq(double a, double b) { +bool dbl_eq(double a, double b) +{ return fabs(a - b) < 1e-6; } @@ -44,17 +49,20 @@ vec2 vec2_normalize(vec2 v); -- Ok bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps); coordinates vec2_to_coordinates(vec2 v, uint32_t width, uint32_t height); */ -const double u_x[] = {1.25, 3.53, 2.64, 8.8}; -const double u_y[] = {3.42, 7.22, 5.32, 2.44}; -const double v_x[] = {4.32, 6.21, 7.42, 9.32}; -const double v_y[] = {5.22, 3.56, 8.65, 6.44}; +const double u_x[] = {1.25, 3.53, 2.64, 8.8}; +const double u_y[] = {3.42, 7.22, 5.32, 2.44}; +const double v_x[] = {4.32, 6.21, 7.42, 9.32}; +const double v_y[] = {5.22, 3.56, 8.65, 6.44}; const uint32_t nb_tests = sizeof(u_x) / sizeof(double); -test_result t_vec2_create_0() { +test_result t_vec2_create_0() +{ bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { vec2 v = vec2_create(u_x[i], u_y[i]); - if (u_x[i] != v.x || u_y[i] != v.y) { + if (u_x[i] != v.x || u_y[i] != v.y) + { passed = false; break; } @@ -62,22 +70,26 @@ test_result t_vec2_create_0() { return (test_result){.passed = passed, .name = "Test vec2_create 0"}; } -test_result t_vec2_create_zero_0() { +test_result t_vec2_create_zero_0() +{ vec2 v = vec2_create_zero(); return (test_result){.passed = (v.x == 0.0 && v.y == 0.0), - .name = "Test vec2_create_zero 0"}; + .name = "Test vec2_create_zero 0"}; } -test_result t_vec2_add_0() { +test_result t_vec2_add_0() +{ double r_x[] = {5.57, 9.74, 10.06, 18.12}; double r_y[] = {8.64, 10.78, 13.97, 8.88}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { vec2 u = vec2_create(u_x[i], u_y[i]); vec2 v = vec2_create(v_x[i], v_y[i]); vec2 r = vec2_add(u, v); - if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) { + if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) + { passed = false; break; } @@ -85,16 +97,19 @@ test_result t_vec2_add_0() { return (test_result){.passed = passed, .name = "Test vec2_add 0"}; } -test_result t_vec2_sub_0() { +test_result t_vec2_sub_0() +{ double r_x[] = {-3.07, -2.68, -4.78, -0.52}; double r_y[] = {-1.80, 3.66, -3.33, -4.00}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { vec2 u = vec2_create(u_x[i], u_y[i]); vec2 v = vec2_create(v_x[i], v_y[i]); vec2 r = vec2_sub(u, v); - if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) { + if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) + { passed = false; break; } @@ -102,16 +117,19 @@ test_result t_vec2_sub_0() { return (test_result){.passed = passed, .name = "Test vec2_sub 0"}; } -test_result t_vec2_mul_0() { +test_result t_vec2_mul_0() +{ double r_x[] = {5.40, 21.9213, 19.5888, 82.016}; double r_y[] = {14.7744, 44.8362, 39.4744, 22.740800}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { double alpha = v_x[i]; - vec2 u = vec2_create(u_x[i], u_y[i]); - vec2 r = vec2_mul(alpha, u); - if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) { + vec2 u = vec2_create(u_x[i], u_y[i]); + vec2 r = vec2_mul(alpha, u); + if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) + { passed = false; break; } @@ -119,15 +137,18 @@ test_result t_vec2_mul_0() { return (test_result){.passed = passed, .name = "Test vec2_mul 0"}; } -test_result t_vec2_dot_0() { +test_result t_vec2_dot_0() +{ double r[] = {23.2524, 47.6245, 65.6068, 97.7296}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - vec2 u = vec2_create(u_x[i], u_y[i]); - vec2 v = vec2_create(v_x[i], v_y[i]); + for (uint32_t i = 0; i < nb_tests; i++) + { + vec2 u = vec2_create(u_x[i], u_y[i]); + vec2 v = vec2_create(v_x[i], v_y[i]); double res = vec2_dot(u, v); - if (!dbl_eq(res, r[i])) { + if (!dbl_eq(res, r[i])) + { passed = false; break; } @@ -135,14 +156,17 @@ test_result t_vec2_dot_0() { return (test_result){.passed = passed, .name = "Test vec2_dot 0"}; } -test_result t_vec2_norm_sqr_0() { +test_result t_vec2_norm_sqr_0() +{ double r[] = {13.2589, 64.5893, 35.272, 83.3936}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - vec2 u = vec2_create(u_x[i], u_y[i]); + for (uint32_t i = 0; i < nb_tests; i++) + { + vec2 u = vec2_create(u_x[i], u_y[i]); double res = vec2_norm_sqr(u); - if (!dbl_eq(res, r[i])) { + if (!dbl_eq(res, r[i])) + { passed = false; break; } @@ -150,14 +174,17 @@ test_result t_vec2_norm_sqr_0() { return (test_result){.passed = passed, .name = "Test vec2_norm_sqr 0"}; } -test_result t_vec2_norm_0() { +test_result t_vec2_norm_0() +{ double r[] = {3.641277, 8.036747, 5.939023, 9.132010}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - vec2 u = vec2_create(u_x[i], u_y[i]); + for (uint32_t i = 0; i < nb_tests; i++) + { + vec2 u = vec2_create(u_x[i], u_y[i]); double res = vec2_norm(u); - if (!dbl_eq(res, r[i])) { + if (!dbl_eq(res, r[i])) + { passed = false; break; } @@ -165,15 +192,18 @@ test_result t_vec2_norm_0() { return (test_result){.passed = passed, .name = "Test vec2_norm 0"}; } -test_result t_vec2_normalize_0() { +test_result t_vec2_normalize_0() +{ double r_x[] = {0.343286, 0.439232, 0.444518, 0.963643}; double r_y[] = {0.939231, 0.898373, 0.895770, 0.267192}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { vec2 u = vec2_create(u_x[i], u_y[i]); vec2 r = vec2_normalize(u); - if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) { + if (!(dbl_eq(r.x, r_x[i]) && dbl_eq(r.y, r_y[i]))) + { passed = false; break; } @@ -181,17 +211,20 @@ test_result t_vec2_normalize_0() { return (test_result){.passed = passed, .name = "Test vec2_normalize 0"}; } -test_result t_vec2_is_approx_equal_0() { +test_result t_vec2_is_approx_equal_0() +{ bool r[] = {true, true, false, false}; double t_x[] = {u_x[0], u_x[1] + 1e-4, u_x[2] + 15.0, u_x[3] + 1e-2}; double t_y[] = {u_y[0], u_y[1] - 1e-4, u_y[2] + 15.0, u_y[3] + 1e-2}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { vec2 u = vec2_create(u_x[i], u_y[i]); vec2 t = vec2_create(t_x[i], t_y[i]); - if (vec2_is_approx_equal(u, t, 1e-3) != r[i]) { + if (vec2_is_approx_equal(u, t, 1e-3) != r[i]) + { passed = false; break; } @@ -200,19 +233,22 @@ test_result t_vec2_is_approx_equal_0() { return (test_result){ .passed = passed, .name = "Test vec2_is_approx_equal 0"}; } -test_result t_vec2_to_coordinates_0() { - uint32_t height = 300; - uint32_t width = 100; - double t_x[] = {0.25, 0.5, 0.75, 1}; - double t_y[] = {0, 1.0 / 3.0, 2.0 / 3.0, 1}; - uint32_t r_col[] = {61, 74, 86, 99}; - uint32_t r_row[] = {149, 199, 249, 299}; +test_result t_vec2_to_coordinates_0() +{ + uint32_t height = 300; + uint32_t width = 100; + double t_x[] = {0.25, 0.5, 0.75, 1}; + double t_y[] = {0, 1.0 / 3.0, 2.0 / 3.0, 1}; + uint32_t r_col[] = {62, 74, 87, 99}; + uint32_t r_row[] = {150, 199, 249, 299}; bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - vec2 t = vec2_create(t_x[i], t_y[i]); + for (uint32_t i = 0; i < nb_tests; i++) + { + vec2 t = vec2_create(t_x[i], t_y[i]); coordinates r = vec2_to_coordinates(t, width, height); - if (r.row != r_row[i] || r.column != r_col[i]) { + if (r.row != r_row[i] || r.column != r_col[i]) + { passed = false; break; } @@ -223,22 +259,27 @@ test_result t_vec2_to_coordinates_0() { } // Add or remove your test function name here const unit_test_t tests[] = {t_vec2_create_0, t_vec2_create_zero_0, - t_vec2_add_0, t_vec2_sub_0, t_vec2_mul_0, t_vec2_dot_0, t_vec2_norm_sqr_0, - t_vec2_norm_0, t_vec2_normalize_0, t_vec2_is_approx_equal_0, - t_vec2_to_coordinates_0}; + t_vec2_add_0, t_vec2_sub_0, t_vec2_mul_0, t_vec2_dot_0, t_vec2_norm_sqr_0, + t_vec2_norm_0, t_vec2_normalize_0, t_vec2_is_approx_equal_0, + t_vec2_to_coordinates_0}; -int main() { +int main() +{ uint32_t nb_tests = sizeof(tests) / sizeof(unit_test_t); char message[256]; bool all_passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { + for (uint32_t i = 0; i < nb_tests; i++) + { printf("Running test n°%d: ...\n", i); test_result r = tests[i](); - if (r.passed) { + if (r.passed) + { sprintf(message, "\t- %s : OK", r.name); print_in_green(message); - } else { + } + else + { all_passed = false; sprintf(message, "\t- %s : FAILED", r.name); print_in_red(message);