Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / gil / test / core / color_base / homogeneous_color_base.cpp
1 //
2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 #include <boost/gil/color_base.hpp>
9 #include <boost/gil/gray.hpp>
10 #include <boost/gil/rgb.hpp>
11 #include <boost/gil/rgba.hpp>
12
13 #include <boost/core/typeinfo.hpp>
14
15 #include <type_traits>
16
17 #define BOOST_TEST_MODULE test_channel_traits
18 #include "unit_test.hpp"
19
20 namespace gil = boost::gil;
21
22 namespace {
23
24 // Unknown layout is used where layout mapping is irrelevant for a test and its result.
25 using unknown_layout_t = gil::gray_layout_t;
26
27 template <int N>
28 using color_base = gil::detail::homogeneous_color_base<std::uint8_t, unknown_layout_t, N>;
29
30 std::integral_constant<int, 0> e0;
31 std::integral_constant<int, 1> e1;
32 std::integral_constant<int, 2> e2;
33 std::integral_constant<int, 3> e3;
34 std::integral_constant<int, 4> e4;
35
36 } // unnamed namespace
37
38 BOOST_AUTO_TEST_CASE(homogeneous_color_base_1_default_constructor)
39 {
40     using fixture = color_base<1>;
41     fixture f;
42     BOOST_TEST(std::uint8_t{f} == std::uint8_t{0});
43     BOOST_TEST(f.at(e0) == std::uint8_t{0});
44 }
45
46 BOOST_AUTO_TEST_CASE(homogeneous_color_base_1_value_constructor)
47 {
48     using fixture = color_base<1>;
49     fixture f{1};
50     BOOST_TEST(std::uint8_t{f} == std::uint8_t{1});
51     BOOST_TEST(f.at(e0) == std::uint8_t{1});
52 }
53
54 BOOST_AUTO_TEST_CASE(homogeneous_color_base_2_default_constructor)
55 {
56     using fixture = color_base<2>;
57     fixture f;
58     BOOST_TEST(f.at(e0) == std::uint8_t{0});
59     BOOST_TEST(f.at(e1) == std::uint8_t{0});
60 }
61
62 BOOST_AUTO_TEST_CASE(homogeneous_color_base_2_value_constructor)
63 {
64     using fixture = color_base<2>;
65     fixture f{2};
66     BOOST_TEST(f.at(e0) == std::uint8_t{2});
67     BOOST_TEST(f.at(e0) == f.at(e1));
68 }
69
70 BOOST_AUTO_TEST_CASE(homogeneous_color_base_3_default_constructor)
71 {
72     using fixture = color_base<3>;
73     fixture f;
74     BOOST_TEST(f.at(e0) == std::uint8_t{0});
75     BOOST_TEST(f.at(e1) == std::uint8_t{0});
76     BOOST_TEST(f.at(e2) == std::uint8_t{0});
77 }
78
79 BOOST_AUTO_TEST_CASE(homogeneous_color_base_3_value_constructor)
80 {
81     using fixture = color_base<3>;
82     fixture f{3};
83     BOOST_TEST(f.at(e0) == std::uint8_t{3});
84     BOOST_TEST(f.at(e0) == f.at(e1));
85     BOOST_TEST(f.at(e0) == f.at(e2));
86 }
87
88 BOOST_AUTO_TEST_CASE(homogeneous_color_base_4_default_constructor)
89 {
90     using fixture = color_base<4>;
91     fixture f;
92     BOOST_TEST(f.at(e0) == std::uint8_t{0});
93     BOOST_TEST(f.at(e1) == std::uint8_t{0});
94     BOOST_TEST(f.at(e2) == std::uint8_t{0});
95     BOOST_TEST(f.at(e3) == std::uint8_t{0});
96 }
97
98 BOOST_AUTO_TEST_CASE(homogeneous_color_base_4_value_constructor)
99 {
100     using fixture = color_base<4>;
101     fixture f{4};
102     BOOST_TEST(f.at(e0) == std::uint8_t{4});
103     BOOST_TEST(f.at(e0) == f.at(e1));
104     BOOST_TEST(f.at(e0) == f.at(e2));
105     BOOST_TEST(f.at(e0) == f.at(e3));
106 }
107
108 BOOST_AUTO_TEST_CASE(homogeneous_color_base_5_default_constructor)
109 {
110     using fixture = color_base<5>;
111     fixture f;
112     BOOST_TEST(f.at(e0) == std::uint8_t{0});
113     BOOST_TEST(f.at(e1) == std::uint8_t{0});
114     BOOST_TEST(f.at(e2) == std::uint8_t{0});
115     BOOST_TEST(f.at(e3) == std::uint8_t{0});
116     BOOST_TEST(f.at(e4) == std::uint8_t{0});
117 }
118
119 BOOST_AUTO_TEST_CASE(homogeneous_color_base_5_value_constructor)
120 {
121     using fixture = color_base<5>;
122     fixture f{5};
123     BOOST_TEST(f.at(e0) == f.at(e1));
124     BOOST_TEST(f.at(e0) == f.at(e2));
125     BOOST_TEST(f.at(e0) == f.at(e3));
126     BOOST_TEST(f.at(e0) == f.at(e4));
127 }