/
Xakka
/
C8
Обзор
Документация
Войти
/
Xakka
/
C8
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/tests/test.c
627 строк
19 KB
moshedur
master: release 1.0
05 янв 2025, 00:25
05 янв 2025, 00:25
ed17595
Код
Авторство
О чём код?
#include <check.h> #include "../viewer3d.h" Suite *translation_cases(void); Suite *rotation_cases(void); Suite *scaling_cases(void); Suite *loading_cases(void); int main(void) { int failed = 0; int success = 0; Suite *Viewer3D[] = {translation_cases(), rotation_cases(), scaling_cases(), loading_cases(), NULL}; for (int i = 0; Viewer3D[i] != NULL; i++) { SRunner *sr = srunner_create(Viewer3D[i]); srunner_set_fork_status(sr, CK_NOFORK); srunner_run_all(sr, CK_NORMAL); failed += srunner_ntests_failed(sr); success += srunner_ntests_run(sr); srunner_free(sr); } printf("\033[41m========= FAILED : %-3d =========\033[0m\n", failed); printf("\033[42m\033[30m========= SUCCESS: %-3d =========\033[0m\n", success); return failed == 0 ? 0 : 1; } START_TEST(identity) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; transform(); mat4 standart; standart[0][0] = 1; standart[0][1] = 8.74227695e-08; standart[0][2] = 8.74227837e-08; standart[0][3] = 0; standart[1][0] = -8.74227766e-08; standart[1][1] = 1; standart[1][2] = 8.74227695e-08; standart[1][3] = 0; standart[2][0] = -8.74227766e-08; standart[2][1] = -8.74227766e-08; standart[2][2] = 1; standart[2][3] = 0; standart[3][0] = 0; standart[3][1] = 0; standart[3][2] = 0; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } } END_TEST START_TEST(translate_x) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; translation(-50, 0); transform(); mat4 standart; standart[0][0] = 1; standart[0][1] = 8.74227695e-08; standart[0][2] = 8.74227837e-08; standart[0][3] = 0; standart[1][0] = -8.74227766e-08; standart[1][1] = 1; standart[1][2] = 8.74227695e-08; standart[1][3] = 0; standart[2][0] = -8.74227766e-08; standart[2][1] = -8.74227766e-08; standart[2][2] = 1; standart[2][3] = 0; standart[3][0] = 2; standart[3][1] = 0; standart[3][2] = 0; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } } END_TEST START_TEST(translate_y) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->move_values[0] = 0; data->move_values[1] = 2; transform(); mat4 standart; standart[0][0] = 1; standart[0][1] = 8.74227695e-08; standart[0][2] = 8.74227837e-08; standart[0][3] = 0; standart[1][0] = -8.74227766e-08; standart[1][1] = 1; standart[1][2] = 8.74227695e-08; standart[1][3] = 0; standart[2][0] = -8.74227766e-08; standart[2][1] = -8.74227766e-08; standart[2][2] = 1; standart[2][3] = 0; standart[3][0] = 0; standart[3][1] = 2; standart[3][2] = 0; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } } END_TEST START_TEST(translate_z) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->move_values[1] = 0; data->move_values[2] = 2; transform(); mat4 standart; standart[0][0] = 1; standart[0][1] = 8.74227695e-08; standart[0][2] = 8.74227837e-08; standart[0][3] = 0; standart[1][0] = -8.74227766e-08; standart[1][1] = 1; standart[1][2] = 8.74227695e-08; standart[1][3] = 0; standart[2][0] = -8.74227766e-08; standart[2][1] = -8.74227766e-08; standart[2][2] = 1; standart[2][3] = 0; standart[3][0] = 0; standart[3][1] = 0; standart[3][2] = 2; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } } END_TEST START_TEST(translate_xyz) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->move_values[0] = 2; data->move_values[1] = 2; data->move_values[2] = 2; transform(); mat4 standart; standart[0][0] = 1; standart[0][1] = 8.74227695e-08; standart[0][2] = 8.74227837e-08; standart[0][3] = 0; standart[1][0] = -8.74227766e-08; standart[1][1] = 1; standart[1][2] = 8.74227695e-08; standart[1][3] = 0; standart[2][0] = -8.74227766e-08; standart[2][1] = -8.74227766e-08; standart[2][2] = 1; standart[2][3] = 0; standart[3][0] = 2; standart[3][1] = 2; standart[3][2] = 2; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } data->move_values[0] = 0; data->move_values[1] = 0; data->move_values[2] = 0; } END_TEST START_TEST(rotate_x) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; rotation(180 * 90 / M_PI, 0); transform(); mat4 standart; standart[0][0] = 1.000000; standart[0][1] = 0.000000; standart[0][2] = -0.000000; standart[0][3] = 0.000000; standart[1][0] = -0.000000; standart[1][1] = 0.448074; standart[1][2] = -0.893997; standart[1][3] = 0.000000; standart[2][0] = -0.000000; standart[2][1] = 0.893997; standart[2][2] = 0.448074; standart[2][3] = 0; standart[3][0] = 0; standart[3][1] = 0; standart[3][2] = 0; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq_tol(standart[i][j], data->transform_matrix[i][j], 0.000001); } } } END_TEST START_TEST(rotate_y) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->rotate_values[0] = 0; data->rotate_values[1] = 90; transform(); mat4 standart; standart[0][0] = 4.480736e-01; standart[0][1] = -8.742278e-08; standart[0][2] = 8.939967e-01; standart[0][3] = 0.000000e+00; standart[1][0] = -3.917184e-08; standart[1][1] = -1.000000e+00; standart[1][2] = -7.815567e-08; standart[1][3] = 0.000000e+00; standart[2][0] = 8.939967e-01; standart[2][1] = 0.000000e+00; standart[2][2] = -4.480736e-01; standart[2][3] = 0.000000e+00; standart[3][0] = 0.000000e+00; standart[3][1] = 0.000000e+00; standart[3][2] = 0.000000e+00; standart[3][3] = 1.000000e+00; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq_tol(standart[i][j], data->transform_matrix[i][j], 0.000001); } } } END_TEST START_TEST(rotate_z) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->rotate_values[1] = 0; data->rotate_values[2] = 90; transform(); mat4 standart; standart[0][0] = -4.480736e-01; standart[0][1] = -8.939967e-01; standart[0][2] = -7.815567e-08; standart[0][3] = 0.000000e+00; standart[1][0] = -8.939967e-01; standart[1][1] = 4.480736e-01; standart[1][2] = 3.917184e-08; standart[1][3] = 0.000000e+00; standart[2][0] = 0.000000e+00; standart[2][1] = 8.742278e-08; standart[2][2] = -1.000000e+00; standart[2][3] = 0.000000e+00; standart[3][0] = 0.000000e+00; standart[3][1] = 0.000000e+00; standart[3][2] = 0.000000e+00; standart[3][3] = 1.000000e+00; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq_tol(standart[i][j], data->transform_matrix[i][j], 0.000001); } } } END_TEST START_TEST(rotate_xyz) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->scale_value = 1; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->rotate_values[0] = 90; data->rotate_values[1] = 90; data->rotate_values[2] = 90; transform(); mat4 standart; standart[0][0] = 2.007700e-01; standart[0][1] = -7.586902e-01; standart[0][2] = 6.197423e-01; standart[0][3] = 0.000000e+00; standart[1][0] = 4.005763e-01; standart[1][1] = -5.137390e-01; standart[1][2] = -7.586902e-01; standart[1][3] = 0.000000e+00; standart[2][0] = 8.939967e-01; standart[2][1] = 4.005763e-01; standart[2][2] = 2.007700e-01; standart[2][3] = 0.000000e+00; standart[3][0] = 0.000000e+00; standart[3][1] = 0.000000e+00; standart[3][2] = 0.000000e+00; standart[3][3] = 1.000000e+00; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq_tol(standart[i][j], data->transform_matrix[i][j], 0.000001); } } } END_TEST START_TEST(scale) { Data *data = get_ptr(); float rad = 180 * M_PI / 180; data->rotate_values[0] = rad; data->rotate_values[1] = rad; data->rotate_values[2] = rad; data->transform_matrix[0][0] = 1.0f; data->transform_matrix[0][1] = 0.0f; data->transform_matrix[0][2] = 0.0f; data->transform_matrix[0][3] = 0.0f; data->transform_matrix[1][0] = 0.0f; data->transform_matrix[1][1] = 1.0f; data->transform_matrix[1][2] = 0.0f; data->transform_matrix[1][3] = 0.0f; data->transform_matrix[2][0] = 0.0f; data->transform_matrix[2][1] = 0.0f; data->transform_matrix[2][2] = 1.0f; data->transform_matrix[2][3] = 0.0f; data->transform_matrix[3][0] = 0.0f; data->transform_matrix[3][1] = 0.0f; data->transform_matrix[3][2] = 0.0f; data->transform_matrix[3][3] = 1.0f; data->move_values[0] = 0; data->move_values[1] = 0; data->move_values[2] = 0; scaling(100); transform(); mat4 standart; standart[0][0] = 2; standart[0][1] = 1.74845539e-07; standart[0][2] = 1.74845567e-07; standart[0][3] = 0; standart[1][0] = -1.74845553e-07; standart[1][1] = 2; standart[1][2] = 1.74845539e-07; standart[1][3] = 0; standart[2][0] = -1.74845553e-07; standart[2][1] = -1.74845553e-07; standart[2][2] = 2; standart[2][3] = 0; standart[3][0] = 0; standart[3][1] = 0; standart[3][2] = 0; standart[3][3] = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ck_assert_float_eq(standart[i][j], data->transform_matrix[i][j]); } } } END_TEST START_TEST(cube) { Data *data = get_ptr(); parse_file("../data-samples/cube.obj"); double vertices[] = {-0.77, -0.77, -0.77, -0.77, -0.77, 0.77, -0.77, 0.77, -0.77, -0.77, 0.77, 0.77, 0.77, -0.77, -0.77, 0.77, -0.77, 0.77, 0.77, 0.77, -0.77, 0.77, 0.77, 0.77}; int ind[] = {0, 2, 2, 6, 6, 4, 4, 0, 0, 1, 1, 3, 3, 2, 2, 0, 0, 1, 1, 5, 5, 4, 4, 0, 4, 5, 5, 7, 7, 6, 6, 4, 7, 5, 5, 1, 1, 3, 3, 7, 7, 6, 6, 2, 2, 3, 3, 7}; ck_assert_int_eq(data->edges_count, 12); ck_assert_int_eq(data->vertices_count, 8); ck_assert_int_eq(data->indices_count, 48); ck_assert_str_eq(data->name_object, "Cube"); for (unsigned i = 0; i < data->vertices_count * 3; i++) { ck_assert_float_eq(vertices[i], data->vertices[i]); } for (unsigned i = 0; i < data->indices_count; i++) { ck_assert_float_eq(ind[i], data->indices[i]); } free_arr(); } END_TEST START_TEST(prism) { Data *data = get_ptr(); parse_file("../data-samples/prism.obj"); double vertices[] = {0, 0.5, 0, -0.5, -0.5, 0, 0.5, -0.5, 0, 0, 0, 0.77}; int ind[] = {0, 1, 1, 2, 2, 0, 0, 1, 1, 3, 3, 0, 1, 2, 2, 3, 3, 1, 0, 2, 2, 3, 3, 0}; ck_assert_int_eq(data->edges_count, 6); ck_assert_int_eq(data->vertices_count, 4); ck_assert_int_eq(data->indices_count, 24); ck_assert_str_eq(data->name_object, "Prism"); for (unsigned i = 0; i < data->vertices_count * 3; i++) { ck_assert_float_eq(vertices[i], data->vertices[i]); } for (unsigned i = 0; i < data->indices_count; i++) { ck_assert_float_eq(ind[i], data->indices[i]); } free_arr(); } END_TEST Suite *translation_cases(void) { Suite *s = suite_create("translation_cases"); TCase *tc = tcase_create("translation"); tcase_add_test(tc, identity); tcase_add_test(tc, translate_x); tcase_add_test(tc, translate_y); tcase_add_test(tc, translate_z); tcase_add_test(tc, translate_xyz); suite_add_tcase(s, tc); return s; } Suite *rotation_cases(void) { Suite *s = suite_create("rotation_cases"); TCase *tc = tcase_create("rotation"); tcase_add_test(tc, rotate_x); tcase_add_test(tc, rotate_y); tcase_add_test(tc, rotate_z); tcase_add_test(tc, rotate_xyz); suite_add_tcase(s, tc); return s; } Suite *scaling_cases(void) { Suite *s = suite_create("scaling_cases"); TCase *tc = tcase_create("scaling"); tcase_add_test(tc, scale); suite_add_tcase(s, tc); return s; } Suite *loading_cases(void) { Suite *s = suite_create("loading_cases"); TCase *tc = tcase_create("parse_file"); tcase_add_test(tc, cube); tcase_add_test(tc, prism); suite_add_tcase(s, tc); return s; }