/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "dusktest.h" #include "display/spritebatch/spritebatchsprite.h" static void test_spriteBatchSpriteTilesetPosition_create(void **state) { tileset_t tileset = { .tileWidth = 8, .tileHeight = 8, .tileCount = 4, .columns = 2, .rows = 2, .uv = { 0.5f, 0.5f } }; spritebatchsprite_t sprite = spriteBatchSpriteTilesetPosition( &tileset, 1, 1, 10.0f, 20.0f, 8.0f, 8.0f ); assert_float_equal(sprite.min[0], 10.0f, 0.0001f); assert_float_equal(sprite.min[1], 20.0f, 0.0001f); assert_float_equal(sprite.min[2], 0.0f, 0.0001f); assert_float_equal(sprite.max[0], 18.0f, 0.0001f); assert_float_equal(sprite.max[1], 28.0f, 0.0001f); assert_float_equal(sprite.uvMin[0], 0.5f, 0.0001f); assert_float_equal(sprite.uvMin[1], 0.5f, 0.0001f); assert_float_equal(sprite.uvMax[0], 1.0f, 0.0001f); assert_float_equal(sprite.uvMax[1], 1.0f, 0.0001f); } static void test_spriteBatchSpriteTilesetPosition_zeroSize(void **state) { tileset_t tileset = { .tileWidth = 8, .tileHeight = 8, .tileCount = 1, .columns = 1, .rows = 1, .uv = { 1.0f, 1.0f } }; spritebatchsprite_t sprite = spriteBatchSpriteTilesetPosition( &tileset, 0, 0, 10.0f, 20.0f, 0.0f, 8.0f ); assert_float_equal(sprite.min[0], 0.0f, 0.0001f); assert_float_equal(sprite.min[1], 0.0f, 0.0001f); assert_float_equal(sprite.max[0], 0.0f, 0.0001f); assert_float_equal(sprite.max[1], 0.0f, 0.0001f); } static void test_spriteBatchSpriteTranslate(void **state) { spritebatchsprite_t sprite = { .min = { 1.0f, 2.0f, 0.0f }, .max = { 5.0f, 6.0f, 0.0f }, .uvMin = { 0.25f, 0.5f }, .uvMax = { 0.75f, 1.0f } }; spritebatchsprite_t translated = spriteBatchSpriteTranslate( &sprite, 10.0f, -3.0f ); assert_float_equal(translated.min[0], 11.0f, 0.0001f); assert_float_equal(translated.min[1], -1.0f, 0.0001f); assert_float_equal(translated.max[0], 15.0f, 0.0001f); assert_float_equal(translated.max[1], 3.0f, 0.0001f); // UVs must be untouched by translation. assert_float_equal(translated.uvMin[0], 0.25f, 0.0001f); assert_float_equal(translated.uvMin[1], 0.5f, 0.0001f); assert_float_equal(translated.uvMax[0], 0.75f, 0.0001f); assert_float_equal(translated.uvMax[1], 1.0f, 0.0001f); // Original sprite must be untouched. assert_float_equal(sprite.min[0], 1.0f, 0.0001f); assert_float_equal(sprite.min[1], 2.0f, 0.0001f); } int main(int argc, char **argv) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_spriteBatchSpriteTilesetPosition_create), cmocka_unit_test(test_spriteBatchSpriteTilesetPosition_zeroSize), cmocka_unit_test(test_spriteBatchSpriteTranslate), }; return cmocka_run_group_tests(tests, NULL, NULL); }