summaryrefslogtreecommitdiffhomepage
path: root/test/bitmask.cpp
blob: f7d12dc2e03a4fd1e7829e06b7e545d74742ef63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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