#include "app.hpp" #include "compat/assert.hpp" #include "src/tile-defs.hpp" #include "src/wall-atlas.hpp" #include "loader/loader.hpp" #include "loader/wall-info.hpp" namespace floormat { namespace { void test_empty_wall() { constexpr auto wall_size = Vector2ui(Vector2i{iTILE_SIZE.x(), iTILE_SIZE.z()}); using enum Wall::Direction_; const auto& wall = *loader.wall_atlas("empty"_s); #define assert_for_group(dir, g, x) \ do { \ fm_assert(!g.is_defined); \ fm_assert(g == Wall::Group{}); \ fm_assert(g.count == 0); \ fm_assert(g.index == (uint32_t)-1); \ fm_assert(g == Wall::Group{}); \ fm_assert(!wall.group(dir, x)); \ } while (false) fm_assert(wall_atlas::expected_size(wall.info().depth, Wall::Group_::wall) == wall_size); fm_assert(wall.depth() == 8); fm_assert(wall.direction_count() == 1); fm_assert(wall.raw_frame_array().size() == 1); fm_assert(wall.direction(N) != nullptr); const auto& n = *wall.direction(N); fm_assert(wall.direction(W) == nullptr); fm_assert(&wall.calc_direction(N) == wall.direction(N)); fm_assert(&wall.calc_direction(W) == wall.direction(N)); assert_for_group(N, n.side, Wall::Group_::side); assert_for_group(N, n.top, Wall::Group_::top); assert_for_group(N, n.corner, Wall::Group_::corner); fm_assert(n.wall.is_defined); fm_assert(n.wall != Wall::Group{}); fm_assert(!n.wall.mirrored); fm_assert(n.wall.count > 0); fm_assert(n.wall.index != (uint32_t)-1); fm_assert(n.wall.pixel_size == wall_size); fm_assert(wall.raw_frame_array()[0].offset.isZero()); fm_assert(wall.raw_frame_array()[0].size == wall_atlas::expected_size(wall.info().depth, Wall::Group_::wall)); fm_assert(wall.info().name == "empty"_s); fm_assert(wall.info().passability == pass_mode::blocked); } void test_concrete_wall() { using enum Wall::Direction_; constexpr auto name = "concrete1"_s; auto& wall = *loader.wall_atlas(name); fm_assert(wall.name() == name); fm_assert(wall.info().depth == 20); fm_assert(wall.raw_frame_array().size() >= 3); fm_assert(!wall.direction(W)); fm_assert(wall.direction(N)); fm_assert(&wall.calc_direction(W) == wall.direction(N)); fm_assert(&wall.calc_direction(N) == wall.direction(N)); fm_assert(wall.frames(N, Wall::Group_::wall).size() >= 3); fm_assert(wall.group(N, Wall::Group_::corner)->count > 0); fm_assert(wall.group(N, Wall::Group_::side)->count > 0); fm_assert(wall.group(N, Wall::Group_::top)->count > 0); fm_assert(wall.group(N, Wall::Group_::wall)->count > 1); fm_assert(wall.group(N, Wall::Group_::corner)->is_defined); fm_assert(wall.frames(N, Wall::Group_::wall)[0].size == Vector2ui(Vector2i{iTILE_SIZE.x(), iTILE_SIZE.z()})); fm_assert(&wall.calc_direction(N) == wall.direction(N)); fm_assert(&wall.calc_direction(W) == wall.direction(N)); } } // namespace void test_app::test_wall_atlas2() { test_empty_wall(); test_concrete_wall(); } // todo add test for wall-tileset-tool for making sure it generates the correct image pixels out of placeholder input } // namespace floormat