]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/gil/test/extension/numeric/kernel.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / gil / test / extension / numeric / kernel.cpp
1 //
2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
3 // Copyright 2019 Miral Shah <miralshah2211@gmail.com>
4 //
5 // Distributed under the Boost Software License, Version 1.0
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
8 //
9 #define BOOST_DISABLE_ASSERTS 1 // kernel_1d_adaptor assertions are too strict
10 #include <boost/gil/extension/numeric/kernel.hpp>
11 #include <vector>
12
13 #define BOOST_TEST_MODULE test_ext_numeric_kernel
14 #include "unit_test.hpp"
15
16 namespace gil = boost::gil;
17
18 BOOST_AUTO_TEST_CASE(kernel_1d_default_constructor)
19 {
20 gil::kernel_1d<int> k;
21 BOOST_TEST(k.center() == 0);
22 BOOST_TEST(k.left_size() == 0);
23 BOOST_TEST(k.right_size() == -1); // TODO: Why not 0?
24 // std::vector interface
25 BOOST_TEST(k.size() == 0);
26 }
27
28 BOOST_AUTO_TEST_CASE(kernel_2d_default_constructor)
29 {
30 gil::detail::kernel_2d<int> k;
31 BOOST_TEST(k.center_y() == 0);
32 BOOST_TEST(k.center_x() == 0);
33
34 //BOOST_TEST(k.left_size() == 0);
35 //BOOST_TEST(k.right_size() == -1);
36 BOOST_TEST(k.upper_size() == 0);
37 BOOST_TEST(k.lower_size() == -1);
38 // std::vector interface
39 BOOST_TEST(k.size() == 0);
40 }
41
42 BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor)
43 {
44 gil::kernel_1d<int> k(9, 4);
45 BOOST_TEST(k.center() == 4);
46 BOOST_TEST(k.left_size() == 4);
47 BOOST_TEST(k.right_size() == 4);
48 // std::vector interface
49 BOOST_TEST(k.size() == 9);
50 }
51
52 BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor)
53 {
54 gil::detail::kernel_2d<int> k(9, 4, 4);
55 BOOST_TEST(k.center_y() == 4);
56 BOOST_TEST(k.center_x() == 4);
57 BOOST_TEST(k.left_size() == 4);
58 BOOST_TEST(k.right_size() == 4);
59 BOOST_TEST(k.upper_size() == 4);
60 BOOST_TEST(k.lower_size() == 4);
61 // std::vector interface
62 BOOST_TEST(k.size() == 9);
63 }
64
65 BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor_with_iterator)
66 {
67 std::vector<int> v(9);
68 gil::kernel_1d<int> k(v.cbegin(), v.size(), 4);
69 BOOST_TEST(k.center() == 4);
70 BOOST_TEST(k.left_size() == 4);
71 BOOST_TEST(k.right_size() == 4);
72 // std::vector interface
73 BOOST_TEST(k.size() == 9);
74 }
75
76 BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor_with_iterator)
77 {
78 std::vector<int> v(81);
79 gil::detail::kernel_2d<int> k(v.cbegin(), v.size(), 4, 4);
80 BOOST_TEST(k.center_y() == 4);
81 BOOST_TEST(k.center_x() == 4);
82 BOOST_TEST(k.left_size() == 4);
83 BOOST_TEST(k.right_size() == 4);
84 BOOST_TEST(k.upper_size() == 4);
85 BOOST_TEST(k.lower_size() == 4);
86 // std::vector interface
87 BOOST_TEST(k.size() == 9);
88 }
89
90 BOOST_AUTO_TEST_CASE(kernel_1d_copy_constructor)
91 {
92 gil::kernel_1d<int> d(9, 4);
93 gil::kernel_1d<int> k(d);
94 BOOST_TEST(k.center() == 4);
95 BOOST_TEST(k.center() == d.center());
96 BOOST_TEST(k.left_size() == d.left_size());
97 BOOST_TEST(k.right_size() == d.right_size());
98 // std::vector interface
99 BOOST_TEST(k.size() == d.size());
100 }
101
102 BOOST_AUTO_TEST_CASE(kernel_2d_copy_constructor)
103 {
104 gil::detail::kernel_2d<int> d(9, 4, 4);
105 gil::detail::kernel_2d<int> k(d);
106 BOOST_TEST(k.center_y() == 4);
107 BOOST_TEST(k.center_x() == 4);
108 BOOST_TEST(k.center_y() == d.center_y());
109 BOOST_TEST(k.center_x() == d.center_x());
110 BOOST_TEST(k.left_size() == d.left_size());
111 BOOST_TEST(k.right_size() == d.right_size());
112 BOOST_TEST(k.lower_size() == d.lower_size());
113 BOOST_TEST(k.upper_size() == d.upper_size());
114 // std::vector interface
115 BOOST_TEST(k.size() == d.size());
116 }
117
118 BOOST_AUTO_TEST_CASE(kernel_1d_assignment_operator)
119 {
120 gil::kernel_1d<int> d(9, 4);
121 gil::kernel_1d<int> k;
122 k = d;
123 BOOST_TEST(k.center() == 4);
124 BOOST_TEST(k.center() == d.center());
125 BOOST_TEST(k.left_size() == d.left_size());
126 BOOST_TEST(k.right_size() == d.right_size());
127 // std::vector interface
128 BOOST_TEST(k.size() == d.size());
129 }
130
131 BOOST_AUTO_TEST_CASE(kernel_2d_assignment_operator)
132 {
133 gil::detail::kernel_2d<int> d(9, 4, 4);
134 gil::detail::kernel_2d<int> k;
135 k = d;
136 BOOST_TEST(k.center_y() == 4);
137 BOOST_TEST(k.center_x() == 4);
138 BOOST_TEST(k.center_y() == d.center_y());
139 BOOST_TEST(k.center_x() == d.center_x());
140 BOOST_TEST(k.left_size() == d.left_size());
141 BOOST_TEST(k.right_size() == d.right_size());
142 BOOST_TEST(k.lower_size() == d.lower_size());
143 BOOST_TEST(k.upper_size() == d.upper_size());
144 // std::vector interface
145 BOOST_TEST(k.size() == d.size());
146 }
147
148 BOOST_AUTO_TEST_CASE(kernel_1d_reverse_Kernel)
149 {
150 gil::kernel_1d<int> d(12, 4);
151 BOOST_TEST(d.center() == 4);
152 auto k = gil::reverse_kernel(d);
153 BOOST_TEST(k.center() == d.right_size());
154 // std::vector interface
155 BOOST_TEST(k.size() == d.size());
156 }
157
158 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_default_constructor)
159 {
160 gil::kernel_1d_fixed<int, 9> k;
161 BOOST_TEST(k.center() == 0);
162 BOOST_TEST(k.left_size() == 0);
163 BOOST_TEST(k.right_size() == 8); // TODO: Why not 0 or -1 if not set?
164 // std::array interface
165 BOOST_TEST(k.size() == 9);
166 }
167
168 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_default_constructor)
169 {
170 gil::detail::kernel_2d_fixed<int, 9> k;
171 BOOST_TEST(k.center_x() == 0);
172 BOOST_TEST(k.center_y() == 0);
173 BOOST_TEST(k.left_size() == 0);
174 BOOST_TEST(k.right_size() == 8); // TODO: Why not 0 or -1 if not set?
175 BOOST_TEST(k.upper_size() == 0);
176 BOOST_TEST(k.lower_size() == 8);
177 // std::array interface
178 BOOST_TEST(k.size() == 9);
179 }
180
181 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor)
182 {
183 gil::kernel_1d_fixed<int, 9> k(4);
184 BOOST_TEST(k.center() == 4);
185 BOOST_TEST(k.left_size() == 4);
186 BOOST_TEST(k.right_size() == 4);
187 // std::vector interface
188 BOOST_TEST(k.size() == 9);
189 }
190
191 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor)
192 {
193 gil::detail::kernel_2d_fixed<int, 9> k(4, 4);
194 BOOST_TEST(k.center_x() == 4);
195 BOOST_TEST(k.center_y() == 4);
196 BOOST_TEST(k.left_size() == 4);
197 BOOST_TEST(k.right_size() == 4);
198 BOOST_TEST(k.upper_size() == 4);
199 BOOST_TEST(k.lower_size() == 4);
200 // std::vector interface
201 BOOST_TEST(k.size() == 9);
202 }
203
204 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor_with_iterator)
205 {
206 // FIXME: The constructor should throw if v.size() < k.size()
207 std::vector<int> v(9);
208 gil::kernel_1d_fixed<int, 9> k(v.cbegin(), 4);
209 BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9);
210 BOOST_TEST(k.center() == 4);
211 BOOST_TEST(k.left_size() == 4);
212 BOOST_TEST(k.right_size() == 4);
213 // std::vector interface
214 BOOST_TEST(k.size() == 9);
215 }
216
217 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor_with_iterator)
218 {
219 // // FIXME: The constructor should throw if v.size() < k.size()
220 std::array<int, 81> v;
221 gil::detail::kernel_2d_fixed<int, 9> k(v.cbegin(), 4, 4);
222 BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9);
223 BOOST_TEST(k.center_y() == 4);
224 BOOST_TEST(k.center_x() == 4);
225 BOOST_TEST(k.left_size() == 4);
226 BOOST_TEST(k.right_size() == 4);
227 BOOST_TEST(k.upper_size() == 4);
228 BOOST_TEST(k.lower_size() == 4);
229 // std::vector interface
230 BOOST_TEST(k.size() == 9);
231 }
232
233 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_copy_constructor)
234 {
235 gil::kernel_1d_fixed<int, 9> d(4);
236 gil::kernel_1d_fixed<int, 9> k(d);
237 BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9);
238 BOOST_TEST(k.center() == 4);
239 BOOST_TEST(k.center() == d.center());
240 BOOST_TEST(k.left_size() == d.left_size());
241 BOOST_TEST(k.right_size() == d.right_size());
242 // std::vector interface
243 BOOST_TEST(k.size() == d.size());
244 }
245
246 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_copy_constructor)
247 {
248 gil::detail::kernel_2d_fixed<int, 9> d(4, 4);
249 gil::detail::kernel_2d_fixed<int, 9> k(d);
250 BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9);
251 BOOST_TEST(k.center_x() == 4);
252 BOOST_TEST(k.center_y() == 4);
253 BOOST_TEST(k.center_x() == d.center_x());
254 BOOST_TEST(k.center_y() == d.center_y());
255 BOOST_TEST(k.left_size() == d.left_size());
256 BOOST_TEST(k.right_size() == d.right_size());
257 BOOST_TEST(k.lower_size() == d.lower_size());
258 BOOST_TEST(k.upper_size() == d.upper_size());
259 // std::vector interface
260 BOOST_TEST(k.size() == d.size());
261 }
262
263 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_assignment_operator)
264 {
265 gil::kernel_1d_fixed<int, 9> d(4);
266 gil::kernel_1d_fixed<int, 9> k;
267 k = d;
268 BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9);
269 BOOST_TEST(k.center() == 4);
270 BOOST_TEST(k.center() == d.center());
271 BOOST_TEST(k.left_size() == d.left_size());
272 BOOST_TEST(k.right_size() == d.right_size());
273 // std::vector interface
274 BOOST_TEST(k.size() == d.size());
275 }
276
277 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_assignment_operator)
278 {
279 gil::detail::kernel_2d_fixed<int, 9> d(4, 4);
280 gil::detail::kernel_2d_fixed<int, 9> k;
281 k = d;
282 BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9);
283 BOOST_TEST(k.center_x() == 4);
284 BOOST_TEST(k.center_y() == 4);
285 BOOST_TEST(k.center_x() == d.center_x());
286 BOOST_TEST(k.center_y() == d.center_y());
287 BOOST_TEST(k.left_size() == d.left_size());
288 BOOST_TEST(k.right_size() == d.right_size());
289 BOOST_TEST(k.lower_size() == d.lower_size());
290 BOOST_TEST(k.upper_size() == d.upper_size());
291 // std::vector interface
292 BOOST_TEST(k.size() == d.size());
293 }
294
295 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_reverse_Kernel)
296 {
297 std::array<int, 3> values = {1, 2, 3};
298 gil::kernel_1d_fixed<int, 3> d(values.begin(), 1);
299 BOOST_TEST((gil::kernel_1d_fixed<int, 3>::static_size) == 3);
300 BOOST_TEST(d == values);
301
302 std::array<int, 3> values_rev = {3, 2, 1};
303 auto k = gil::reverse_kernel(d);
304 BOOST_TEST(k == values_rev);
305 }
306
307