141 lines
4.3 KiB
C
141 lines
4.3 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/overworld/tileshape.h"
|
|
|
|
static void test_tileShapeGetRampHeightGroundIsAlwaysFlat(void **state) {
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_GROUND, 0.0f, 0.0f), 0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_GROUND, 1.0f, 1.0f), 0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_GROUND, 0.5f, 0.5f), 0.0f, 0.0001f
|
|
);
|
|
|
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
|
}
|
|
|
|
static void test_tileShapeGetRampHeightCardinalRamps(void **state) {
|
|
// RAMP_NORTH: rises going north (+y) - height equals localY.
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTH, 0.5f, 0.0f), 0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTH, 0.5f, 1.0f), 1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTH, 0.0f, 0.5f), 0.5f, 0.0001f
|
|
);
|
|
|
|
// RAMP_SOUTH: rises going south (-y) - height equals 1 - localY.
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_SOUTH, 0.5f, 0.0f), 1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_SOUTH, 0.5f, 1.0f), 0.0f, 0.0001f
|
|
);
|
|
|
|
// RAMP_EAST: rises going east (+x) - height equals localX.
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_EAST, 0.0f, 0.5f), 0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_EAST, 1.0f, 0.5f), 1.0f, 0.0001f
|
|
);
|
|
|
|
// RAMP_WEST: rises going west (-x) - height equals 1 - localX.
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_WEST, 0.0f, 0.5f), 1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_WEST, 1.0f, 0.5f), 0.0f, 0.0001f
|
|
);
|
|
|
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
|
}
|
|
|
|
static void test_tileShapeGetRampHeightOuterCornerRamps(void **state) {
|
|
// RAMP_NORTHEAST: only the NE corner raised - a hip shape, height
|
|
// equal to min(localX, localY) since the mesh is split along the
|
|
// SW-NE diagonal into two flat triangles.
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST, 0.0f, 0.0f),
|
|
0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST, 1.0f, 1.0f),
|
|
1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST, 0.3f, 0.7f),
|
|
0.3f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST, 0.7f, 0.3f),
|
|
0.3f, 0.0001f
|
|
);
|
|
|
|
// RAMP_SOUTHWEST: only the SW corner raised - height equal to
|
|
// min(1 - localX, 1 - localY).
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_SOUTHWEST, 0.0f, 0.0f),
|
|
1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_SOUTHWEST, 1.0f, 1.0f),
|
|
0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_SOUTHWEST, 1.0f, 0.0f),
|
|
0.0f, 0.0001f
|
|
);
|
|
|
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
|
}
|
|
|
|
static void test_tileShapeGetRampHeightInnerCornerRamp(void **state) {
|
|
// RAMP_NORTHEAST_INNER: only the opposite (SW) corner lowered, rest of
|
|
// the tile raised - height equal to max(localX, localY).
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST_INNER, 0.0f, 0.0f),
|
|
0.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST_INNER, 1.0f, 1.0f),
|
|
1.0f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST_INNER, 0.3f, 0.7f),
|
|
0.7f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST_INNER, 0.7f, 0.3f),
|
|
0.7f, 0.0001f
|
|
);
|
|
assert_float_equal(
|
|
tileShapeGetRampHeight(TILE_SHAPE_RAMP_NORTHEAST_INNER, 1.0f, 0.0f),
|
|
1.0f, 0.0001f
|
|
);
|
|
|
|
assert_int_equal(memoryGetAllocatedCount(), 0);
|
|
}
|
|
|
|
int main(void) {
|
|
const struct CMUnitTest tests[] = {
|
|
cmocka_unit_test(test_tileShapeGetRampHeightGroundIsAlwaysFlat),
|
|
cmocka_unit_test(test_tileShapeGetRampHeightCardinalRamps),
|
|
cmocka_unit_test(test_tileShapeGetRampHeightOuterCornerRamps),
|
|
cmocka_unit_test(test_tileShapeGetRampHeightInnerCornerRamp),
|
|
};
|
|
|
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
|
}
|