]>
Commit | Line | Data |
---|---|---|
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.hpp> | |
11 | #include <boost/gil/extension/numeric/kernel.hpp> | |
12 | ||
13 | #include <boost/core/lightweight_test.hpp> | |
14 | ||
15 | #include <vector> | |
16 | ||
17 | namespace gil = boost::gil; | |
18 | ||
19 | void test_kernel_1d_default_constructor() | |
20 | { | |
21 | gil::kernel_1d<int> k; | |
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); | |
25 | // std::vector interface | |
26 | BOOST_TEST_EQ(k.size(), 0); | |
27 | } | |
28 | ||
29 | void test_kernel_2d_default_constructor() | |
30 | { | |
31 | gil::detail::kernel_2d<int> k; | |
32 | BOOST_TEST_EQ(k.center_y(), 0); | |
33 | BOOST_TEST_EQ(k.center_x(), 0); | |
34 | ||
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); | |
39 | // std::vector interface | |
40 | BOOST_TEST_EQ(k.size(), 0); | |
41 | } | |
42 | ||
43 | void test_kernel_1d_parameterized_constructor() | |
44 | { | |
45 | gil::kernel_1d<int> k(9, 4); | |
46 | BOOST_TEST_EQ(k.center(), 4); | |
47 | BOOST_TEST_EQ(k.left_size(), 4); | |
48 | BOOST_TEST_EQ(k.right_size(), 4); | |
49 | // std::vector interface | |
50 | BOOST_TEST_EQ(k.size(), 9); | |
51 | } | |
52 | ||
53 | void test_kernel_2d_parameterized_constructor() | |
54 | { | |
55 | gil::detail::kernel_2d<int> k(9, 4, 4); | |
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); | |
62 | // std::vector interface | |
63 | BOOST_TEST_EQ(k.size(), 9); | |
64 | } | |
65 | ||
66 | void test_kernel_1d_parameterized_constructor_with_iterator() | |
67 | { | |
68 | std::vector<int> v(9); | |
69 | gil::kernel_1d<int> k(v.cbegin(), v.size(), 4); | |
70 | BOOST_TEST_EQ(k.center(), 4); | |
71 | BOOST_TEST_EQ(k.left_size(), 4); | |
72 | BOOST_TEST_EQ(k.right_size(), 4); | |
73 | // std::vector interface | |
74 | BOOST_TEST_EQ(k.size(), 9); | |
75 | } | |
76 | ||
77 | void test_kernel_2d_parameterized_constructor_with_iterator() | |
78 | { | |
79 | std::vector<int> v(81); | |
80 | gil::detail::kernel_2d<int> k(v.cbegin(), v.size(), 4, 4); | |
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); | |
87 | // std::vector interface | |
88 | BOOST_TEST_EQ(k.size(), 9); | |
89 | } | |
90 | ||
91 | void test_kernel_1d_copy_constructor() | |
92 | { | |
93 | gil::kernel_1d<int> d(9, 4); | |
94 | gil::kernel_1d<int> k(d); | |
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()); | |
99 | // std::vector interface | |
100 | BOOST_TEST_EQ(k.size(), d.size()); | |
101 | } | |
102 | ||
103 | void test_kernel_2d_copy_constructor() | |
104 | { | |
105 | gil::detail::kernel_2d<int> d(9, 4, 4); | |
106 | gil::detail::kernel_2d<int> k(d); | |
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()); | |
115 | // std::vector interface | |
116 | BOOST_TEST_EQ(k.size(), d.size()); | |
117 | } | |
118 | ||
119 | void test_kernel_1d_assignment_operator() | |
120 | { | |
121 | gil::kernel_1d<int> d(9, 4); | |
122 | gil::kernel_1d<int> k; | |
123 | k = d; | |
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()); | |
128 | // std::vector interface | |
129 | BOOST_TEST_EQ(k.size(), d.size()); | |
130 | } | |
131 | ||
132 | void test_kernel_2d_assignment_operator() | |
133 | { | |
134 | gil::detail::kernel_2d<int> d(9, 4, 4); | |
135 | gil::detail::kernel_2d<int> k; | |
136 | k = d; | |
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()); | |
145 | // std::vector interface | |
146 | BOOST_TEST_EQ(k.size(), d.size()); | |
147 | } | |
148 | ||
149 | void test_kernel_1d_reverse_kernel() | |
150 | { | |
151 | gil::kernel_1d<int> d(12, 4); | |
152 | BOOST_TEST_EQ(d.center(), 4); | |
153 | auto k = gil::reverse_kernel(d); | |
154 | BOOST_TEST_EQ(k.center(), d.right_size()); | |
155 | // std::vector interface | |
156 | BOOST_TEST_EQ(k.size(), d.size()); | |
157 | } | |
158 | ||
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 | ||
184 | int main() | |
185 | { | |
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(); | |
197 | test_kernel_2d_reverse_kernel(); | |
198 | ||
199 | return ::boost::report_errors(); | |
200 | } |