/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "dusktest.h" #include "util/memory.h" #include "rpg/entity/entitydir.h" static void test_entityDirToVec2(void **state) { vec2 out; entityDirToVec2(ENTITY_DIR_NORTH, out); assert_float_equal(out[0], 0.0f, 0.0001f); assert_float_equal(out[1], 1.0f, 0.0001f); entityDirToVec2(ENTITY_DIR_EAST, out); assert_float_equal(out[0], 1.0f, 0.0001f); assert_float_equal(out[1], 0.0f, 0.0001f); entityDirToVec2(ENTITY_DIR_SOUTH, out); assert_float_equal(out[0], 0.0f, 0.0001f); assert_float_equal(out[1], -1.0f, 0.0001f); entityDirToVec2(ENTITY_DIR_WEST, out); assert_float_equal(out[0], -1.0f, 0.0001f); assert_float_equal(out[1], 0.0f, 0.0001f); assert_int_equal(memoryGetAllocatedCount(), 0); } static void test_entityDirFromVec2Cardinal(void **state) { assert_int_equal( entityDirFromVec2((vec2){ 0.0f, 1.0f }), ENTITY_DIR_NORTH ); assert_int_equal( entityDirFromVec2((vec2){ 1.0f, 0.0f }), ENTITY_DIR_EAST ); assert_int_equal( entityDirFromVec2((vec2){ 0.0f, -1.0f }), ENTITY_DIR_SOUTH ); assert_int_equal( entityDirFromVec2((vec2){ -1.0f, 0.0f }), ENTITY_DIR_WEST ); assert_int_equal(memoryGetAllocatedCount(), 0); } static void test_entityDirFromVec2DominantAxis(void **state) { // |x| > |y| picks east/west regardless of y's sign. assert_int_equal( entityDirFromVec2((vec2){ 2.0f, 1.0f }), ENTITY_DIR_EAST ); assert_int_equal( entityDirFromVec2((vec2){ -2.0f, -1.0f }), ENTITY_DIR_WEST ); // |y| >= |x| picks north/south. assert_int_equal( entityDirFromVec2((vec2){ 1.0f, 2.0f }), ENTITY_DIR_NORTH ); assert_int_equal( entityDirFromVec2((vec2){ -1.0f, -3.0f }), ENTITY_DIR_SOUTH ); // Exact diagonal ties break toward north/south. assert_int_equal( entityDirFromVec2((vec2){ 0.7f, 0.7f }), ENTITY_DIR_NORTH ); assert_int_equal(memoryGetAllocatedCount(), 0); } int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_entityDirToVec2), cmocka_unit_test(test_entityDirFromVec2Cardinal), cmocka_unit_test(test_entityDirFromVec2DominantAxis), }; return cmocka_run_group_tests(tests, NULL, NULL); }