Imported Upstream version 1.71.0
[platform/upstream/boost.git] / libs / gil / test / core / pixel / num_channels.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/pixel.hpp>
9 #include <boost/gil/concepts/pixel.hpp>
10 #include <boost/gil/typedefs.hpp>
11
12 #include <boost/mp11.hpp>
13
14 namespace gil = boost::gil;
15 using namespace boost::mp11;
16
17 template <std::size_t NumChannels>
18 struct assert_num_channels
19 {
20     template <typename Pixel>
21     void operator()(Pixel&&)
22     {
23         static_assert(
24             gil::num_channels<Pixel>::value == NumChannels,
25             "pixels does not have expected number of channels");
26
27         // TODO: Verify num_channels type with std::is_same
28         // e.g. is std::integral_constant<T, ...>
29     }
30 };
31
32 template <std::size_t NumChannels, typename... Pixels>
33 void test()
34 {
35     mp_for_each<Pixels...>(assert_num_channels<NumChannels>());
36 }
37
38
39 int main()
40 {
41     using one = mp_list
42     <
43         gil::gray8_pixel_t,
44         gil::gray8c_pixel_t,
45         gil::gray8s_pixel_t,
46         gil::gray8sc_pixel_t,
47         gil::gray16_pixel_t,
48         gil::gray16c_pixel_t,
49         gil::gray16s_pixel_t,
50         gil::gray16sc_pixel_t,
51         gil::gray16_pixel_t,
52         gil::gray32_pixel_t,
53         gil::gray32c_pixel_t,
54         gil::gray32f_pixel_t,
55         gil::gray32fc_pixel_t,
56         gil::gray32s_pixel_t,
57         gil::gray32sc_pixel_t
58     >;
59     test<1, one>();
60
61     using three = mp_list
62     <
63         gil::bgr8_pixel_t,
64         gil::bgr8c_pixel_t,
65         gil::bgr8s_pixel_t,
66         gil::bgr8sc_pixel_t,
67         gil::bgr16_pixel_t,
68         gil::bgr16c_pixel_t,
69         gil::bgr16s_pixel_t,
70         gil::bgr16sc_pixel_t,
71         gil::bgr32_pixel_t,
72         gil::bgr32c_pixel_t,
73         gil::bgr32f_pixel_t,
74         gil::bgr32fc_pixel_t,
75         gil::bgr32s_pixel_t,
76         gil::bgr32sc_pixel_t,
77         gil::rgb8_pixel_t,
78         gil::rgb8c_pixel_t,
79         gil::rgb8s_pixel_t,
80         gil::rgb8sc_pixel_t,
81         gil::rgb16_pixel_t,
82         gil::rgb16c_pixel_t,
83         gil::rgb16s_pixel_t,
84         gil::rgb16sc_pixel_t,
85         gil::rgb32_pixel_t,
86         gil::rgb32c_pixel_t,
87         gil::rgb32f_pixel_t,
88         gil::rgb32fc_pixel_t,
89         gil::rgb32s_pixel_t,
90         gil::rgb32sc_pixel_t
91     >;
92     test<3, three>();
93
94     using four = mp_list
95     <
96         gil::abgr8_pixel_t,
97         gil::abgr8c_pixel_t,
98         gil::abgr8s_pixel_t,
99         gil::abgr8sc_pixel_t,
100         gil::abgr16_pixel_t,
101         gil::abgr16c_pixel_t,
102         gil::abgr16s_pixel_t,
103         gil::abgr16sc_pixel_t,
104         gil::abgr32_pixel_t,
105         gil::abgr32c_pixel_t,
106         gil::abgr32f_pixel_t,
107         gil::abgr32fc_pixel_t,
108         gil::abgr32s_pixel_t,
109         gil::abgr32sc_pixel_t,
110         gil::bgra8_pixel_t,
111         gil::bgra8c_pixel_t,
112         gil::bgra8s_pixel_t,
113         gil::bgra8sc_pixel_t,
114         gil::bgra16_pixel_t,
115         gil::bgra16c_pixel_t,
116         gil::bgra16s_pixel_t,
117         gil::bgra16sc_pixel_t,
118         gil::bgra32_pixel_t,
119         gil::bgra32c_pixel_t,
120         gil::bgra32f_pixel_t,
121         gil::bgra32fc_pixel_t,
122         gil::bgra32s_pixel_t,
123         gil::bgra32sc_pixel_t,
124         gil::cmyk8_pixel_t,
125         gil::cmyk8c_pixel_t,
126         gil::cmyk8s_pixel_t,
127         gil::cmyk8sc_pixel_t,
128         gil::cmyk16_pixel_t,
129         gil::cmyk16c_pixel_t,
130         gil::cmyk16s_pixel_t,
131         gil::cmyk16sc_pixel_t,
132         gil::cmyk32_pixel_t,
133         gil::cmyk32c_pixel_t,
134         gil::cmyk32f_pixel_t,
135         gil::cmyk32fc_pixel_t,
136         gil::cmyk32s_pixel_t,
137         gil::cmyk32sc_pixel_t,
138         gil::rgba8_pixel_t,
139         gil::rgba8c_pixel_t,
140         gil::rgba8s_pixel_t,
141         gil::rgba8sc_pixel_t,
142         gil::rgba16_pixel_t,
143         gil::rgba16c_pixel_t,
144         gil::rgba16s_pixel_t,
145         gil::rgba16sc_pixel_t,
146         gil::rgba32_pixel_t,
147         gil::rgba32c_pixel_t,
148         gil::rgba32f_pixel_t,
149         gil::rgba32fc_pixel_t,
150         gil::rgba32s_pixel_t,
151         gil::rgba32sc_pixel_t
152     >;
153     test<4, four>();
154 }