]>
Commit | Line | Data |
---|---|---|
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 | |
f67539c2 | 10 | #include <boost/gil.hpp> |
92f5a8d4 | 11 | #include <boost/gil/extension/numeric/kernel.hpp> |
92f5a8d4 | 12 | |
f67539c2 TL |
13 | #include <boost/core/lightweight_test.hpp> |
14 | ||
15 | #include <vector> | |
92f5a8d4 TL |
16 | |
17 | namespace gil = boost::gil; | |
18 | ||
f67539c2 | 19 | void test_kernel_1d_default_constructor() |
92f5a8d4 TL |
20 | { |
21 | gil::kernel_1d<int> k; | |
f67539c2 TL |
22 | BOOST_TEST_EQ(k.center(), 0); |
23 | BOOST_TEST_EQ(k.left_size(), 0); | |
24 | BOOST_TEST_EQ(static_cast<int>(k.right_size()), -1); | |
92f5a8d4 | 25 | // std::vector interface |
f67539c2 | 26 | BOOST_TEST_EQ(k.size(), 0); |
92f5a8d4 TL |
27 | } |
28 | ||
f67539c2 | 29 | void test_kernel_2d_default_constructor() |
92f5a8d4 TL |
30 | { |
31 | gil::detail::kernel_2d<int> k; | |
f67539c2 TL |
32 | BOOST_TEST_EQ(k.center_y(), 0); |
33 | BOOST_TEST_EQ(k.center_x(), 0); | |
92f5a8d4 | 34 | |
f67539c2 TL |
35 | //BOOST_TEST_EQ(k.left_size(), 0); |
36 | //BOOST_TEST_EQ(k.right_size(), -1); | |
37 | BOOST_TEST_EQ(k.upper_size(), 0); | |
38 | BOOST_TEST_EQ(static_cast<int>(k.lower_size()), -1); | |
92f5a8d4 | 39 | // std::vector interface |
f67539c2 | 40 | BOOST_TEST_EQ(k.size(), 0); |
92f5a8d4 TL |
41 | } |
42 | ||
f67539c2 | 43 | void test_kernel_1d_parameterized_constructor() |
92f5a8d4 TL |
44 | { |
45 | gil::kernel_1d<int> k(9, 4); | |
f67539c2 TL |
46 | BOOST_TEST_EQ(k.center(), 4); |
47 | BOOST_TEST_EQ(k.left_size(), 4); | |
48 | BOOST_TEST_EQ(k.right_size(), 4); | |
92f5a8d4 | 49 | // std::vector interface |
f67539c2 | 50 | BOOST_TEST_EQ(k.size(), 9); |
92f5a8d4 TL |
51 | } |
52 | ||
f67539c2 | 53 | void test_kernel_2d_parameterized_constructor() |
92f5a8d4 TL |
54 | { |
55 | gil::detail::kernel_2d<int> k(9, 4, 4); | |
f67539c2 TL |
56 | BOOST_TEST_EQ(k.center_y(), 4); |
57 | BOOST_TEST_EQ(k.center_x(), 4); | |
58 | BOOST_TEST_EQ(k.left_size(), 4); | |
59 | BOOST_TEST_EQ(k.right_size(), 4); | |
60 | BOOST_TEST_EQ(k.upper_size(), 4); | |
61 | BOOST_TEST_EQ(k.lower_size(), 4); | |
92f5a8d4 | 62 | // std::vector interface |
f67539c2 | 63 | BOOST_TEST_EQ(k.size(), 9); |
92f5a8d4 TL |
64 | } |
65 | ||
f67539c2 | 66 | void test_kernel_1d_parameterized_constructor_with_iterator() |
92f5a8d4 TL |
67 | { |
68 | std::vector<int> v(9); | |
69 | gil::kernel_1d<int> k(v.cbegin(), v.size(), 4); | |
f67539c2 TL |
70 | BOOST_TEST_EQ(k.center(), 4); |
71 | BOOST_TEST_EQ(k.left_size(), 4); | |
72 | BOOST_TEST_EQ(k.right_size(), 4); | |
92f5a8d4 | 73 | // std::vector interface |
f67539c2 | 74 | BOOST_TEST_EQ(k.size(), 9); |
92f5a8d4 TL |
75 | } |
76 | ||
f67539c2 | 77 | void test_kernel_2d_parameterized_constructor_with_iterator() |
92f5a8d4 TL |
78 | { |
79 | std::vector<int> v(81); | |
80 | gil::detail::kernel_2d<int> k(v.cbegin(), v.size(), 4, 4); | |
f67539c2 TL |
81 | BOOST_TEST_EQ(k.center_y(), 4); |
82 | BOOST_TEST_EQ(k.center_x(), 4); | |
83 | BOOST_TEST_EQ(k.left_size(), 4); | |
84 | BOOST_TEST_EQ(k.right_size(), 4); | |
85 | BOOST_TEST_EQ(k.upper_size(), 4); | |
86 | BOOST_TEST_EQ(k.lower_size(), 4); | |
92f5a8d4 | 87 | // std::vector interface |
f67539c2 | 88 | BOOST_TEST_EQ(k.size(), 9); |
92f5a8d4 TL |
89 | } |
90 | ||
f67539c2 | 91 | void test_kernel_1d_copy_constructor() |
92f5a8d4 TL |
92 | { |
93 | gil::kernel_1d<int> d(9, 4); | |
94 | gil::kernel_1d<int> k(d); | |
f67539c2 TL |
95 | BOOST_TEST_EQ(k.center(), 4); |
96 | BOOST_TEST_EQ(k.center(), d.center()); | |
97 | BOOST_TEST_EQ(k.left_size(), d.left_size()); | |
98 | BOOST_TEST_EQ(k.right_size(), d.right_size()); | |
92f5a8d4 | 99 | // std::vector interface |
f67539c2 | 100 | BOOST_TEST_EQ(k.size(), d.size()); |
92f5a8d4 TL |
101 | } |
102 | ||
f67539c2 | 103 | void test_kernel_2d_copy_constructor() |
92f5a8d4 TL |
104 | { |
105 | gil::detail::kernel_2d<int> d(9, 4, 4); | |
106 | gil::detail::kernel_2d<int> k(d); | |
f67539c2 TL |
107 | BOOST_TEST_EQ(k.center_y(), 4); |
108 | BOOST_TEST_EQ(k.center_x(), 4); | |
109 | BOOST_TEST_EQ(k.center_y(), d.center_y()); | |
110 | BOOST_TEST_EQ(k.center_x(), d.center_x()); | |
111 | BOOST_TEST_EQ(k.left_size(), d.left_size()); | |
112 | BOOST_TEST_EQ(k.right_size(), d.right_size()); | |
113 | BOOST_TEST_EQ(k.lower_size(), d.lower_size()); | |
114 | BOOST_TEST_EQ(k.upper_size(), d.upper_size()); | |
92f5a8d4 | 115 | // std::vector interface |
f67539c2 | 116 | BOOST_TEST_EQ(k.size(), d.size()); |
92f5a8d4 TL |
117 | } |
118 | ||
f67539c2 | 119 | void test_kernel_1d_assignment_operator() |
92f5a8d4 TL |
120 | { |
121 | gil::kernel_1d<int> d(9, 4); | |
122 | gil::kernel_1d<int> k; | |
123 | k = d; | |
f67539c2 TL |
124 | BOOST_TEST_EQ(k.center(), 4); |
125 | BOOST_TEST_EQ(k.center(), d.center()); | |
126 | BOOST_TEST_EQ(k.left_size(), d.left_size()); | |
127 | BOOST_TEST_EQ(k.right_size(), d.right_size()); | |
92f5a8d4 | 128 | // std::vector interface |
f67539c2 | 129 | BOOST_TEST_EQ(k.size(), d.size()); |
92f5a8d4 TL |
130 | } |
131 | ||
f67539c2 | 132 | void test_kernel_2d_assignment_operator() |
92f5a8d4 TL |
133 | { |
134 | gil::detail::kernel_2d<int> d(9, 4, 4); | |
135 | gil::detail::kernel_2d<int> k; | |
136 | k = d; | |
f67539c2 TL |
137 | BOOST_TEST_EQ(k.center_y(), 4); |
138 | BOOST_TEST_EQ(k.center_x(), 4); | |
139 | BOOST_TEST_EQ(k.center_y(), d.center_y()); | |
140 | BOOST_TEST_EQ(k.center_x(), d.center_x()); | |
141 | BOOST_TEST_EQ(k.left_size(), d.left_size()); | |
142 | BOOST_TEST_EQ(k.right_size(), d.right_size()); | |
143 | BOOST_TEST_EQ(k.lower_size(), d.lower_size()); | |
144 | BOOST_TEST_EQ(k.upper_size(), d.upper_size()); | |
92f5a8d4 | 145 | // std::vector interface |
f67539c2 | 146 | BOOST_TEST_EQ(k.size(), d.size()); |
92f5a8d4 TL |
147 | } |
148 | ||
f67539c2 | 149 | void test_kernel_1d_reverse_kernel() |
92f5a8d4 TL |
150 | { |
151 | gil::kernel_1d<int> d(12, 4); | |
f67539c2 | 152 | BOOST_TEST_EQ(d.center(), 4); |
92f5a8d4 | 153 | auto k = gil::reverse_kernel(d); |
f67539c2 | 154 | BOOST_TEST_EQ(k.center(), d.right_size()); |
92f5a8d4 | 155 | // std::vector interface |
f67539c2 | 156 | BOOST_TEST_EQ(k.size(), d.size()); |
92f5a8d4 TL |
157 | } |
158 | ||
20effc67 TL |
159 | void test_kernel_2d_reverse_kernel() |
160 | { | |
161 | std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9}; | |
162 | gil::detail::kernel_2d<int> d(data.begin(), data.size(), 2, 0); | |
163 | ||
164 | BOOST_TEST_EQ(d.center_x(), 0); | |
165 | BOOST_TEST_EQ(d.center_y(), 2); | |
166 | ||
167 | auto k = gil::detail::reverse_kernel(d); | |
168 | ||
169 | BOOST_TEST_EQ(k.center_x(), d.lower_size()); | |
170 | BOOST_TEST_EQ(k.center_x(), 0); | |
171 | ||
172 | BOOST_TEST_EQ(k.center_y(), d.right_size()); | |
173 | BOOST_TEST_EQ(k.center_y(), 2); | |
174 | ||
175 | // std::vector interface | |
176 | BOOST_TEST_EQ(k.size(), d.size()); | |
177 | ||
178 | for (size_t i = 0; i < k.size() * k.size(); i++) | |
179 | { | |
180 | BOOST_TEST_EQ(d[i], k[(k.size()*k.size()) - 1 - i]); | |
181 | } | |
182 | } | |
183 | ||
f67539c2 | 184 | int main() |
92f5a8d4 | 185 | { |
f67539c2 TL |
186 | test_kernel_1d_default_constructor(); |
187 | test_kernel_2d_default_constructor(); | |
188 | test_kernel_1d_parameterized_constructor(); | |
189 | test_kernel_2d_parameterized_constructor(); | |
190 | test_kernel_1d_parameterized_constructor_with_iterator(); | |
191 | test_kernel_2d_parameterized_constructor_with_iterator(); | |
192 | test_kernel_1d_copy_constructor(); | |
193 | test_kernel_2d_copy_constructor(); | |
194 | test_kernel_1d_assignment_operator(); | |
195 | test_kernel_2d_assignment_operator(); | |
196 | test_kernel_1d_reverse_kernel(); | |
20effc67 | 197 | test_kernel_2d_reverse_kernel(); |
92f5a8d4 | 198 | |
f67539c2 | 199 | return ::boost::report_errors(); |
92f5a8d4 | 200 | } |