summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/app.hpp1
-rw-r--r--test/bitmask.cpp56
-rw-r--r--test/main.cpp1
3 files changed, 58 insertions, 0 deletions
diff --git a/test/app.hpp b/test/app.hpp
index b3787826..894401c8 100644
--- a/test/app.hpp
+++ b/test/app.hpp
@@ -29,5 +29,6 @@ struct test_app final : private FM_APPLICATION
static void test_serializer();
static void test_entity();
static void test_loader();
+ static void test_bitmask();
};
} // namespace floormat
diff --git a/test/bitmask.cpp b/test/bitmask.cpp
new file mode 100644
index 00000000..f7d12dc2
--- /dev/null
+++ b/test/bitmask.cpp
@@ -0,0 +1,56 @@
+#include "app.hpp"
+#include "compat/assert.hpp"
+#include "src/anim-atlas.hpp"
+#include <Magnum/Magnum.h>
+#include <Magnum/Math/Vector4.h>
+#include <Magnum/ImageView.h>
+#include <Magnum/Image.h>
+#include <Corrade/Containers/ArrayView.h>
+#include <Magnum/PixelFormat.h>
+#include <iterator>
+
+namespace floormat {
+
+namespace {
+
+constexpr Vector4ub
+ red(0xff, 0x00, 0x00, 0x20), green(0x00, 0x00, 0xff, 0x20), blue(0xff, 0x00, 0x00, 0x20),
+ red0(0xff, 0x00, 0x00, 0x1f), green0(0x00, 0x00, 0xff, 0x1f), blue0(0xff, 0x00, 0x00, 0x1f),
+ none0(0xff, 0xff, 0xff, 0x1f), white(0xff, 0xff, 0xff, 0xff);
+
+constexpr Vector4ub img_data[] = {
+ red, green0, blue0, white,
+ red0, green, blue, none0,
+ none0, green, blue0, blue,
+ red0, green0, blue, green,
+ red, green, blue, none0,
+ red, green0, blue0, red,
+};
+
+constexpr bool result[] = {
+ // inverse row order, use tac(1)
+ true, false, false, true,
+ true, true, true, false,
+ false, false, true, true,
+ false, true, false, true,
+ false, true, true, false,
+ true, false, false, true,
+
+};
+
+} // namespace
+
+void test_app::test_bitmask()
+{
+ constexpr auto size = std::size(img_data), width = 4_uz, height = size/4;
+ static_assert(size % 4 == 0);
+ static_assert(size == std::size(result));
+ ImageView2D img{PixelFormat::RGBA8Unorm, {width, height}, img_data};
+ auto bitmask = anim_atlas::make_bitmask(img);
+ fm_assert(img.size().product() == std::size(result));
+ for (auto i = 0_uz; i < size; i++)
+ if (bitmask[i] != result[i])
+ fm_abort("wrong value at bit %zu, should be %s", i, result[i] ? "true" : "false");
+}
+
+} // namespace floormat
diff --git a/test/main.cpp b/test/main.cpp
index c01f09f0..2187ba21 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -25,6 +25,7 @@ int test_app::exec()
test_serializer();
test_entity();
test_loader();
+ test_bitmask();
return 0;
}