#include "pke-test-font.hpp" #include "asset-manager.hpp" #include "ecs.hpp" #include "font.hpp" #include "pk.h" #include "pke-test-stubs.h" #include "thread-pool.hpp" static pk_membucket *bkt; void pke_test_font_setup() { pke_test_stub_init_vulkan(); bkt = pk_mem_bucket_create("pke_test_font", PK_MEM_DEFAULT_BUCKET_SIZE, PK_MEMBUCKET_FLAG_NONE); pk_mem_bucket_set_client_mem_bucket(bkt); pk_ev_init(bkt); PkeThreads_Init(); AM_Init(); ECS_Init(); FontType_Init(); } void pke_test_font_teardown() { FontType_Teardown(); ECS_Teardown(); AM_Teardown(); PkeThreads_Teardown(); pk_ev_teardown(); pk_mem_bucket_destroy(bkt); pk_mem_bucket_set_client_mem_bucket(nullptr); bkt = nullptr; pke_test_stub_teardown_vulkan(); } /* Ensure the font exists */ int pke_test_font_001() { FontType *ft = FontType_Get({0,0}); PK_TEST_ASSERT_NEQ_RET(nullptr, ft); return 0; } /* Ensure we can have more than one FontRender */ int pke_test_font_002() { FontTypeHandle fti{}; FontTypeRender handle_001{}; FontTypeRender handle_002{}; FontRenderSettings frs{}; handle_001 = FontType_AddStringRender(fti, std::move(cstring_to_pk_cstr("string one")), &frs); PK_TEST_ASSERT_EQ_RET(0u, handle_001.font_type_handle.b); PK_TEST_ASSERT_EQ_RET(0u, handle_001.font_type_handle.i); PK_TEST_ASSERT_EQ_RET(0u, handle_001.font_render_handle.b); PK_TEST_ASSERT_EQ_RET(0u, handle_001.font_render_handle.i); handle_002 = FontType_AddStringRender(fti, std::move(cstring_to_pk_cstr("string two")), &frs); PK_TEST_ASSERT_EQ_RET(0u, handle_002.font_type_handle.b); PK_TEST_ASSERT_EQ_RET(0u, handle_002.font_type_handle.i); PK_TEST_ASSERT_EQ_RET(0u, handle_002.font_render_handle.b); PK_TEST_ASSERT_EQ_RET(1u, handle_002.font_render_handle.i); return 0; } /* Ensure we can have a lot of FontRenders */ int pke_test_font_003() { unsigned short u; const unsigned short count = 96; FontTypeHandle fti{0,0}; FontTypeRender handles[count]; FontRenderSettings frs{}; for (u = 0; u < count; ++u) { handles[u].font_type_handle = {0,0}; handles[u].font_render_handle = {0,0}; } for (u = 0; u < count; ++u) { char *s = (char*)malloc(64); snprintf(s, 1024, "%s - %u", "test", u); handles[u] = FontType_AddStringRender(fti, std::move(cstring_to_pk_cstr(s)), &frs); PK_TEST_ASSERT_EQ_RET(0u, handles[u].font_type_handle.b); PK_TEST_ASSERT_EQ_RET(0u, handles[u].font_type_handle.i); PK_TEST_ASSERT_EQ_RET(floor(u / (float)PK_BKT_ARR_HANDLE_I_MAX), handles[u].font_render_handle.b); PK_TEST_ASSERT_EQ_RET(u % PK_BKT_ARR_HANDLE_I_MAX, handles[u].font_render_handle.i); } return 0; } struct pk_test_group *pke_test_font_get_group() { static const uint64_t test_count = 3; static struct pk_test tests[test_count] = { { .title = "test 001", .func = pke_test_font_001, .expected_result = 0, }, { .title = "test 002", .func = pke_test_font_002, .expected_result = 0, }, { .title = "test 003", .func = pke_test_font_003, .expected_result = 0, }, }; static struct pk_test_group group = {}; group.title = "font test"; group.test_setup = pke_test_font_setup; group.test_teardown = pke_test_font_teardown; group.n_tests = test_count; group.tests = &tests[0]; return &group; }