]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
92f5a8d4
TL
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
16namespace gil = boost::gil;
17
18BOOST_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
28BOOST_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
42BOOST_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
52BOOST_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
65BOOST_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
76BOOST_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
90BOOST_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
102BOOST_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
118BOOST_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
131BOOST_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
148BOOST_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
158BOOST_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
168BOOST_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
181BOOST_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
191BOOST_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
204BOOST_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
217BOOST_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
233BOOST_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
246BOOST_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
263BOOST_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
277BOOST_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
295BOOST_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