• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
test_kernel_1d_default_constructor()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 
test_kernel_2d_default_constructor()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 
test_kernel_1d_parameterized_constructor()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 
test_kernel_2d_parameterized_constructor()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 
test_kernel_1d_parameterized_constructor_with_iterator()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 
test_kernel_2d_parameterized_constructor_with_iterator()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 
test_kernel_1d_copy_constructor()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 
test_kernel_2d_copy_constructor()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 
test_kernel_1d_assignment_operator()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 
test_kernel_2d_assignment_operator()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 
test_kernel_1d_reverse_kernel()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 
test_kernel_2d_reverse_kernel()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 
main()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 }
201