85 lines
2.2 KiB
C
85 lines
2.2 KiB
C
/**
|
|
* 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);
|
|
}
|