#include "./pke-test-static-ui.h" #include "./pke-test-types.h" #include "window.hpp" #include "dynamic-array.hpp" #include "vendor-glm-include.hpp" #include struct pke_ui_box_instance_buffer_item { glm::mat4 pos_scale; glm::vec2 px_scale; float depth; float padding[1]; }; struct pke_ui_flex_params { float px_per_unit; float unit_total; }; #define PKE_TEST_EXPOSE #include "static-ui.hpp" void pke_test_static_ui_setup() { Extent.width = 1920; Extent.height = 1080; pke_ui_init(); } void pke_test_static_ui_teardown() { pke_ui_teardown(); } // test static int pke_test_static_ui_000() { DynArray arr{}; float calculated_offset; uint8_t err_index = 0; pke_ui_box *ui_box = pke_ui_box_new_root(); ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_STATIC; ui_box->pos_top_left_x = 10; ui_box->pos_top_left_y = 10; ui_box->max_width = 500; ui_box->max_height = 500; pke_ui_box *c_ui_box = pke_ui_box_new_child(ui_box); c_ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_STATIC; c_ui_box->pos_top_left_x = 10; c_ui_box->pos_top_left_y = 10; c_ui_box->max_width = 100; c_ui_box->max_height = 100; calculated_offset = ui_box->pos_top_left_x + c_ui_box->pos_top_left_x + built_in_offset; pke_ui_calc_px(arr, nullptr, ui_box); pke_ui_recalc_sizes_recursive(arr, ui_box, 0); PKE_TEST_ASSERT(ui_box->internal.parent == nullptr, err_index); PKE_TEST_ASSERT(ui_box->internal.h_children == 1, err_index); PKE_TEST_ASSERT(c_ui_box->internal.parent != nullptr, err_index); PKE_TEST_ASSERT(c_ui_box->internal.h_children == 0, err_index); PKE_TEST_ASSERT(c_ui_box->internal.r_children == 0, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.x == 10, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.y == 10, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.x == calculated_offset, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.y == calculated_offset, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.x == 500, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.y == 500, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_size.x == 100, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_size.y == 100, err_index); return 0; } // test dynamic int pke_test_static_ui_100() { DynArray arr{}; bool b; float unit; float calculated_offset_x, calculated_offset_y; uint8_t err_index = 0; pke_ui_box *ui_box = pke_ui_box_new_root(); ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_DYNAMIC; ui_box->pos_top_left_x = 0.1; ui_box->pos_top_left_y = 0.1; ui_box->max_width = 0.8; ui_box->max_height = 0.8; pke_ui_box *c_ui_box = pke_ui_box_new_child(ui_box); c_ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_DYNAMIC; c_ui_box->pos_top_left_x = 0.1; c_ui_box->pos_top_left_y = 0.1; c_ui_box->max_width = 0.8; c_ui_box->max_height = 0.8; unit = Extent.width * 0.1; calculated_offset_x = (unit * 8) - (built_in_offset * 2); // padded parent calculated_offset_x = (calculated_offset_x * 0.1) + unit + built_in_offset; unit = Extent.height * 0.1; calculated_offset_y = (unit * 8) - (built_in_offset * 2); // padded parent calculated_offset_y = (calculated_offset_y * 0.1) + unit + built_in_offset; pke_ui_calc_px(arr, nullptr, ui_box); pke_ui_recalc_sizes_recursive(arr, ui_box, 0); PKE_TEST_ASSERT(ui_box->internal.parent == nullptr, err_index); PKE_TEST_ASSERT(ui_box->internal.h_children == 1, err_index); PKE_TEST_ASSERT(c_ui_box->internal.parent != nullptr, err_index); PKE_TEST_ASSERT(c_ui_box->internal.h_children == 0, err_index); PKE_TEST_ASSERT(c_ui_box->internal.r_children == 0, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.x == Extent.width * 0.1, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.y == Extent.height * 0.1, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.x == calculated_offset_x, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.y == calculated_offset_y, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.x == (Extent.width * 0.1) * 8, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.y == (Extent.height * 0.1) * 8, err_index); b = flt_equal( c_ui_box->internal.px_size.x, (ui_box->internal.px_size.x - (built_in_offset * 2)) * 0.8, std::numeric_limits::epsilon()); PKE_TEST_ASSERT(b, err_index); b = flt_equal( c_ui_box->internal.px_size.y, (ui_box->internal.px_size.y - (built_in_offset * 2)) * 0.8, std::numeric_limits::epsilon()); PKE_TEST_ASSERT(b, err_index); return 0; } // test dynamic + static int pke_test_static_ui_200() { DynArray arr{}; float unit; float calculated_offset_x, calculated_offset_y; uint8_t err_index = 0; pke_ui_box *ui_box = pke_ui_box_new_root(); ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_DYNAMIC; ui_box->pos_top_left_x = 0.1; ui_box->pos_top_left_y = 0.1; ui_box->max_width = 0.8; ui_box->max_height = 0.8; pke_ui_box *c_ui_box = pke_ui_box_new_child(ui_box); c_ui_box->flags = PKE_UI_BOX_FLAG_POSITION_TYPE_STATIC; c_ui_box->pos_top_left_x = 1; c_ui_box->pos_top_left_y = 1; c_ui_box->max_width = 300; c_ui_box->max_height = 300; unit = Extent.width * 0.1; calculated_offset_x = unit + 1 + built_in_offset; unit = Extent.height * 0.1; calculated_offset_y = unit + 1 + built_in_offset; pke_ui_calc_px(arr, nullptr, ui_box); pke_ui_recalc_sizes_recursive(arr, ui_box, 0); PKE_TEST_ASSERT(ui_box->internal.parent == nullptr, err_index); PKE_TEST_ASSERT(ui_box->internal.h_children == 1, err_index); PKE_TEST_ASSERT(c_ui_box->internal.parent != nullptr, err_index); PKE_TEST_ASSERT(c_ui_box->internal.h_children == 0, err_index); PKE_TEST_ASSERT(c_ui_box->internal.r_children == 0, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.x == Extent.width * 0.1, err_index); PKE_TEST_ASSERT(ui_box->internal.px_corner.y == Extent.height * 0.1, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.x == calculated_offset_x, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_corner.y == calculated_offset_y, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.x == (Extent.width * 0.1) * 8, err_index); PKE_TEST_ASSERT(ui_box->internal.px_size.y == (Extent.height * 0.1) * 8, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_size.x == 300, err_index); PKE_TEST_ASSERT(c_ui_box->internal.px_size.y == 300, err_index); return 0; } pke_test_group *pke_test_static_ui_get_group() { static const uint64_t test_count = 3; static struct pke_test tests[test_count] = { { .title = "test 000", .func = pke_test_static_ui_000, .expected_result = 0, }, { .title = "test 100", .func = pke_test_static_ui_100, .expected_result = 0, }, { .title = "test 200", .func = pke_test_static_ui_200, .expected_result = 0, }, }; static struct pke_test_group group = {}; group.title = "static_ui"; group.group_setup = NULL; group.group_teardown = NULL; group.test_setup = pke_test_static_ui_setup; group.test_teardown = pke_test_static_ui_teardown; group.tests = &tests[0]; group.n_tests = test_count; return &group; }