diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-29 03:10:43 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-29 03:10:43 +0200 |
commit | 055b027a3cf567fd8cfe19e1aad7a055f2449b86 (patch) | |
tree | bddc754664c0f6987ee2322fe1aabcc9c218910e /test | |
parent | 9c9d02e674231dca8f9b75ea23a0efa0b28f970b (diff) |
a
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | test/app.hpp | 1 | ||||
-rw-r--r-- | test/main.cpp | 1 | ||||
-rw-r--r-- | test/serializer.cpp | 57 |
4 files changed, 60 insertions, 2 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ea0009f8..0ef13ac6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,6 +6,5 @@ file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/test") link_libraries(${PROJECT_NAME}) link_libraries(Magnum::WindowlessWglApplication Magnum::Trade) -#add_executable(${self} "${sources}" "../loader/loader-impl.cpp") -add_library(${self} STATIC "${sources}" "../loader/loader-impl.cpp") +add_executable(${self} "${sources}" "../loader/loader-impl.cpp") install(TARGETS ${self} RUNTIME DESTINATION bin) diff --git a/test/app.hpp b/test/app.hpp index 943e53a3..31df8a35 100644 --- a/test/app.hpp +++ b/test/app.hpp @@ -10,5 +10,6 @@ struct floormat final : Platform::WindowlessWglApplication // NOLINT(cppcoreguid static bool test_json(); static bool test_tile_iter(); static bool test_const_math(); + static bool test_serializer(); }; } // namespace floormat diff --git a/test/main.cpp b/test/main.cpp index 75e2950f..38127c05 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -28,6 +28,7 @@ int floormat::exec() ret &= test_json(); ret &= test_tile_iter(); ret &= test_const_math(); + ret &= test_serializer(); return !ret; } diff --git a/test/serializer.cpp b/test/serializer.cpp new file mode 100644 index 00000000..7970bdac --- /dev/null +++ b/test/serializer.cpp @@ -0,0 +1,57 @@ +#include "app.hpp"
+#include "src/world.hpp"
+#include "src/loader.hpp"
+#include "src/tile-atlas.hpp"
+#include <Corrade/Utility/Path.h>
+
+namespace floormat {
+
+namespace Path = Corrade::Utility::Path;
+
+static chunk make_test_chunk()
+{
+ auto metal1 = loader.tile_atlas("metal1", {2, 2}),
+ metal2 = loader.tile_atlas("metal2", {2, 2}),
+ tiles = loader.tile_atlas("tiles", {8, 5});
+ constexpr auto N = TILE_MAX_DIM;
+ chunk c;
+ for (auto& [x, k, pt] : c) {
+ x.ground = { tiles, decltype(tile_image::variant)(k % tiles->num_tiles()) };
+ }
+ constexpr auto K = N/2;
+ c[{K, K }].wall_north = { metal1, 0 };
+ c[{K, K }].wall_west = { metal2, 0 };
+ c[{K, K+1}].wall_north = { metal1, 0 };
+ c[{K+1, K }].wall_west = { metal2, 0 };
+ return c;
+}
+
+static bool chunks_equal(const chunk& a, const chunk& b)
+{
+ for (std::size_t i = 0; i < TILE_COUNT; i++)
+ if (a[i] != b[i])
+ return false;
+ return true;
+}
+
+static bool test_serializer1()
+{
+ constexpr auto filename = "../test/test-serializer1.dat";
+ if (Path::exists(filename))
+ Path::remove(filename);
+ world w;
+ const chunk_coords coord{1, 1};
+ w[coord] = make_test_chunk();
+ w.serialize(filename);
+ auto w2 = world::deserialize(filename);
+ return chunks_equal(w[coord], w2[coord]);
+}
+
+bool floormat::test_serializer()
+{
+ bool ret = true;
+ ret &= test_serializer1();
+ return ret;
+}
+
+} // namespace floormat
|