2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
3 // Copyright 2019 Miral Shah <miralshah2211@gmail.com>
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
9 #define BOOST_DISABLE_ASSERTS 1 // kernel_1d_adaptor assertions are too strict
10 #include <boost/gil/extension/numeric/kernel.hpp>
13 #define BOOST_TEST_MODULE test_ext_numeric_kernel
14 #include "unit_test.hpp"
16 namespace gil
= boost::gil
;
18 BOOST_AUTO_TEST_CASE(kernel_1d_default_constructor
)
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);
28 BOOST_AUTO_TEST_CASE(kernel_2d_default_constructor
)
30 gil::detail::kernel_2d
<int> k
;
31 BOOST_TEST(k
.center_y() == 0);
32 BOOST_TEST(k
.center_x() == 0);
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);
42 BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor
)
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);
52 BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor
)
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);
65 BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor_with_iterator
)
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);
76 BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor_with_iterator
)
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);
90 BOOST_AUTO_TEST_CASE(kernel_1d_copy_constructor
)
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());
102 BOOST_AUTO_TEST_CASE(kernel_2d_copy_constructor
)
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());
118 BOOST_AUTO_TEST_CASE(kernel_1d_assignment_operator
)
120 gil::kernel_1d
<int> d(9, 4);
121 gil::kernel_1d
<int> k
;
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());
131 BOOST_AUTO_TEST_CASE(kernel_2d_assignment_operator
)
133 gil::detail::kernel_2d
<int> d(9, 4, 4);
134 gil::detail::kernel_2d
<int> k
;
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());
148 BOOST_AUTO_TEST_CASE(kernel_1d_reverse_Kernel
)
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());
158 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_default_constructor
)
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);
168 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_default_constructor
)
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);
181 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor
)
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);
191 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor
)
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);
204 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor_with_iterator
)
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);
217 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor_with_iterator
)
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);
233 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_copy_constructor
)
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());
246 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_copy_constructor
)
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());
263 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_assignment_operator
)
265 gil::kernel_1d_fixed
<int, 9> d(4);
266 gil::kernel_1d_fixed
<int, 9> k
;
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());
277 BOOST_AUTO_TEST_CASE(kernel_2d_fixed_assignment_operator
)
279 gil::detail::kernel_2d_fixed
<int, 9> d(4, 4);
280 gil::detail::kernel_2d_fixed
<int, 9> k
;
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());
295 BOOST_AUTO_TEST_CASE(kernel_1d_fixed_reverse_Kernel
)
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
);
302 std::array
<int, 3> values_rev
= {3, 2, 1};
303 auto k
= gil::reverse_kernel(d
);
304 BOOST_TEST(k
== values_rev
);