From 6aaa28ef62e0ebc2b4c2ced4d457c91d36e8a311 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 18 Mar 2023 21:08:23 +0100 Subject: test/serializer: add new comprehensive test --- src/anim-atlas.cpp | 4 +-- src/anim-atlas.hpp | 2 +- test/CMakeLists.txt | 8 ++++++ test/app.hpp | 9 +++--- test/json.cpp | 1 + test/main.cpp | 3 +- test/save/quicksave - Copy (00).dat | Bin 0 -> 2620 bytes test/save/quicksave - Copy (02).dat | Bin 0 -> 2547 bytes test/save/quicksave - Copy (03).dat | Bin 0 -> 2620 bytes test/save/quicksave - Copy (04).dat | Bin 0 -> 104106 bytes test/save/quicksave - Copy (05).dat | Bin 0 -> 2620 bytes test/save/quicksave - Copy (06).dat | Bin 0 -> 2710 bytes test/save/quicksave - Copy (07).dat | Bin 0 -> 2741 bytes test/save/quicksave - Copy (08).dat | Bin 0 -> 3493 bytes test/save/quicksave - Copy (09).dat | Bin 0 -> 3542 bytes test/save/quicksave - Copy (19).dat | Bin 0 -> 4470 bytes test/save/quicksave - Copy (2).dat | Bin 2547 -> 0 bytes test/save/quicksave - Copy (3).dat | Bin 2620 -> 0 bytes test/save/quicksave - Copy (4).dat | Bin 104106 -> 0 bytes test/save/quicksave - Copy (5).dat | Bin 2620 -> 0 bytes test/save/quicksave - Copy (6).dat | Bin 2710 -> 0 bytes test/save/quicksave - Copy (7).dat | Bin 2741 -> 0 bytes test/save/quicksave - Copy (8).dat | Bin 3493 -> 0 bytes test/save/quicksave - Copy (9).dat | Bin 3542 -> 0 bytes test/save/quicksave - Copy.dat | Bin 2620 -> 0 bytes test/save/quicksave.dat | Bin 812 -> 0 bytes test/serializer.cpp | 54 ++++++++++++++++++++++++++++-------- test/tile-iter.cpp | 1 + 28 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 test/save/quicksave - Copy (00).dat create mode 100644 test/save/quicksave - Copy (02).dat create mode 100644 test/save/quicksave - Copy (03).dat create mode 100644 test/save/quicksave - Copy (04).dat create mode 100644 test/save/quicksave - Copy (05).dat create mode 100644 test/save/quicksave - Copy (06).dat create mode 100644 test/save/quicksave - Copy (07).dat create mode 100644 test/save/quicksave - Copy (08).dat create mode 100644 test/save/quicksave - Copy (09).dat create mode 100644 test/save/quicksave - Copy (19).dat delete mode 100644 test/save/quicksave - Copy (2).dat delete mode 100644 test/save/quicksave - Copy (3).dat delete mode 100644 test/save/quicksave - Copy (4).dat delete mode 100644 test/save/quicksave - Copy (5).dat delete mode 100644 test/save/quicksave - Copy (6).dat delete mode 100644 test/save/quicksave - Copy (7).dat delete mode 100644 test/save/quicksave - Copy (8).dat delete mode 100644 test/save/quicksave - Copy (9).dat delete mode 100644 test/save/quicksave - Copy.dat delete mode 100644 test/save/quicksave.dat diff --git a/src/anim-atlas.cpp b/src/anim-atlas.cpp index 8ddd73d6..4c94a7af 100644 --- a/src/anim-atlas.cpp +++ b/src/anim-atlas.cpp @@ -35,8 +35,8 @@ decltype(anim_atlas::_group_indices) anim_atlas::make_group_indices(const anim_d } anim_atlas::anim_atlas() noexcept = default; -anim_atlas::anim_atlas(StringView name, const ImageView2D& image, anim_def info) noexcept : - _name{name}, _bitmask{make_bitmask(image)}, +anim_atlas::anim_atlas(String name, const ImageView2D& image, anim_def info) noexcept : + _name{std::move(name)}, _bitmask{make_bitmask(image)}, _info{std::move(info)}, _group_indices{make_group_indices(_info)} { fm_assert(!_info.groups.empty()); diff --git a/src/anim-atlas.hpp b/src/anim-atlas.hpp index 64830efa..e84faf70 100644 --- a/src/anim-atlas.hpp +++ b/src/anim-atlas.hpp @@ -24,7 +24,7 @@ struct anim_atlas final using quad = std::array; anim_atlas() noexcept; - anim_atlas(StringView name, const ImageView2D& tex, anim_def info) noexcept; + anim_atlas(String name, const ImageView2D& tex, anim_def info) noexcept; ~anim_atlas() noexcept; anim_atlas(anim_atlas&&) noexcept; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index eae3ffd5..11e3fb09 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -21,3 +21,11 @@ if(FLOORMAT_PRECOMPILED-HEADERS) target_precompile_headers(${self}_o PRIVATE precomp.hpp) endif() install(TARGETS ${self} RUNTIME DESTINATION bin) + +set(save-dir "${CMAKE_BINARY_DIR}/test/save") +file(REMOVE_RECURSE "${save-dir}") +file(MAKE_DIRECTORY "${save-dir}") +file(GLOB saves "save/*.dat" CONFIGURE_ARGS) +foreach(file ${saves}) + configure_file("${file}" "${save-dir}" COPYONLY) +endforeach() diff --git a/test/app.hpp b/test/app.hpp index 2152e2e5..0b143b71 100644 --- a/test/app.hpp +++ b/test/app.hpp @@ -1,5 +1,4 @@ #pragma once -#include "src/world.hpp" #include #ifdef __APPLE__ @@ -15,7 +14,9 @@ namespace floormat { +struct chunk_coords; struct chunk; +struct world; struct test_app final : private FM_APPLICATION { @@ -23,15 +24,13 @@ struct test_app final : private FM_APPLICATION explicit test_app(const Arguments& arguments); ~test_app(); int exec() override; - chunk& make_test_chunk(chunk_coords ch); static void test_json(); static void test_tile_iter(); static void test_const_math(); - void test_serializer(); + static void test_serializer_1(); + static void test_serializer_2(); static void test_entity(); static void test_loader(); static void test_bitmask(); - - world w; }; } // namespace floormat diff --git a/test/json.cpp b/test/json.cpp index 349219b1..7d01a51b 100644 --- a/test/json.cpp +++ b/test/json.cpp @@ -7,6 +7,7 @@ #include "tile-atlas.hpp" #include "tile.hpp" #include "chunk.hpp" +#include "world.hpp" #include "loader/loader.hpp" #include #include diff --git a/test/main.cpp b/test/main.cpp index 05ecd7fe..6add1844 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -27,7 +27,8 @@ int test_app::exec() test_entity(); test_loader(); test_bitmask(); - test_serializer(); + test_serializer_1(); + test_serializer_2(); return 0; } diff --git a/test/save/quicksave - Copy (00).dat b/test/save/quicksave - Copy (00).dat new file mode 100644 index 00000000..64c9e9dc Binary files /dev/null and b/test/save/quicksave - Copy (00).dat differ diff --git a/test/save/quicksave - Copy (02).dat b/test/save/quicksave - Copy (02).dat new file mode 100644 index 00000000..d0062a39 Binary files /dev/null and b/test/save/quicksave - Copy (02).dat differ diff --git a/test/save/quicksave - Copy (03).dat b/test/save/quicksave - Copy (03).dat new file mode 100644 index 00000000..64c9e9dc Binary files /dev/null and b/test/save/quicksave - Copy (03).dat differ diff --git a/test/save/quicksave - Copy (04).dat b/test/save/quicksave - Copy (04).dat new file mode 100644 index 00000000..e753b3d3 Binary files /dev/null and b/test/save/quicksave - Copy (04).dat differ diff --git a/test/save/quicksave - Copy (05).dat b/test/save/quicksave - Copy (05).dat new file mode 100644 index 00000000..64c9e9dc Binary files /dev/null and b/test/save/quicksave - Copy (05).dat differ diff --git a/test/save/quicksave - Copy (06).dat b/test/save/quicksave - Copy (06).dat new file mode 100644 index 00000000..67f0193a Binary files /dev/null and b/test/save/quicksave - Copy (06).dat differ diff --git a/test/save/quicksave - Copy (07).dat b/test/save/quicksave - Copy (07).dat new file mode 100644 index 00000000..ef4778ec Binary files /dev/null and b/test/save/quicksave - Copy (07).dat differ diff --git a/test/save/quicksave - Copy (08).dat b/test/save/quicksave - Copy (08).dat new file mode 100644 index 00000000..b712bd3f Binary files /dev/null and b/test/save/quicksave - Copy (08).dat differ diff --git a/test/save/quicksave - Copy (09).dat b/test/save/quicksave - Copy (09).dat new file mode 100644 index 00000000..e85af84d Binary files /dev/null and b/test/save/quicksave - Copy (09).dat differ diff --git a/test/save/quicksave - Copy (19).dat b/test/save/quicksave - Copy (19).dat new file mode 100644 index 00000000..0592c168 Binary files /dev/null and b/test/save/quicksave - Copy (19).dat differ diff --git a/test/save/quicksave - Copy (2).dat b/test/save/quicksave - Copy (2).dat deleted file mode 100644 index d0062a39..00000000 Binary files a/test/save/quicksave - Copy (2).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (3).dat b/test/save/quicksave - Copy (3).dat deleted file mode 100644 index 64c9e9dc..00000000 Binary files a/test/save/quicksave - Copy (3).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (4).dat b/test/save/quicksave - Copy (4).dat deleted file mode 100644 index e753b3d3..00000000 Binary files a/test/save/quicksave - Copy (4).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (5).dat b/test/save/quicksave - Copy (5).dat deleted file mode 100644 index 64c9e9dc..00000000 Binary files a/test/save/quicksave - Copy (5).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (6).dat b/test/save/quicksave - Copy (6).dat deleted file mode 100644 index 67f0193a..00000000 Binary files a/test/save/quicksave - Copy (6).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (7).dat b/test/save/quicksave - Copy (7).dat deleted file mode 100644 index ef4778ec..00000000 Binary files a/test/save/quicksave - Copy (7).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (8).dat b/test/save/quicksave - Copy (8).dat deleted file mode 100644 index b712bd3f..00000000 Binary files a/test/save/quicksave - Copy (8).dat and /dev/null differ diff --git a/test/save/quicksave - Copy (9).dat b/test/save/quicksave - Copy (9).dat deleted file mode 100644 index e85af84d..00000000 Binary files a/test/save/quicksave - Copy (9).dat and /dev/null differ diff --git a/test/save/quicksave - Copy.dat b/test/save/quicksave - Copy.dat deleted file mode 100644 index 64c9e9dc..00000000 Binary files a/test/save/quicksave - Copy.dat and /dev/null differ diff --git a/test/save/quicksave.dat b/test/save/quicksave.dat deleted file mode 100644 index 75a61886..00000000 Binary files a/test/save/quicksave.dat and /dev/null differ diff --git a/test/serializer.cpp b/test/serializer.cpp index 928fb25b..87f11b4a 100644 --- a/test/serializer.cpp +++ b/test/serializer.cpp @@ -11,7 +11,9 @@ namespace floormat { namespace Path = Corrade::Utility::Path; -chunk& test_app::make_test_chunk(chunk_coords ch) +namespace { + +chunk& make_test_chunk(world& w, chunk_coords ch) { chunk& c = w[ch]; c.mark_modified(); @@ -43,7 +45,7 @@ chunk& test_app::make_test_chunk(chunk_coords ch) return c; } -static void assert_chunks_equal(const chunk& a, const chunk& b) +void assert_chunks_equal(const chunk& a, const chunk& b) { fm_assert(a.entities().size() == b.entities().size()); @@ -80,17 +82,47 @@ static void assert_chunks_equal(const chunk& a, const chunk& b) } } -void test_app::test_serializer() +void test_serializer(StringView input, StringView tmp) { - constexpr auto filename = "../test/test-serializer1.dat"; - if (Path::exists(filename)) - Path::remove(filename); - const chunk_coords coord{1, 1}; - auto& c = make_test_chunk(coord); - w.serialize(filename); - auto w2 = world::deserialize(filename); + if (Path::exists(tmp)) + Path::remove(tmp); + chunk_coords coord{}; + world w; + if (input) + w = world::deserialize(input); + else + { + coord = {1, 1}; + w = world(); + make_test_chunk(w, coord); + } + w.serialize(tmp); + auto w2 = world::deserialize(tmp); auto& c2 = w2[coord]; - assert_chunks_equal(c, c2); + assert_chunks_equal(w[coord], c2); +} + +} // namespace + +void test_app::test_serializer_1() +{ + constexpr auto tmp_filename = "../test/test-serializer1.dat"_s; + test_serializer({}, tmp_filename); +} + +void test_app::test_serializer_2() +{ + constexpr auto tmp_filename = "../test/test-serializer2.dat"_s; + constexpr auto dir = "../test/save/"_s; + using LF = Path::ListFlag; + auto files = Path::list(dir, LF::SkipDirectories|LF::SkipSpecial|LF::SkipDotAndDotDot); + fm_assert(files); + for (const StringView file : *files) + { + fm_assert(file.hasSuffix(".dat"_s)); + auto path = Path::join(dir, file); + test_serializer(path, tmp_filename); + } } } // namespace floormat diff --git a/test/tile-iter.cpp b/test/tile-iter.cpp index 7b9eafbf..1b6e2fcc 100644 --- a/test/tile-iter.cpp +++ b/test/tile-iter.cpp @@ -1,5 +1,6 @@ #include "app.hpp" #include "chunk.hpp" +#include "world.hpp" namespace floormat { static inline bool always_false() -- cgit v1.2.3