]> git.proxmox.com Git - ceph.git/blame_incremental - ceph/src/boost/libs/gil/test/extension/numeric/kernel.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / gil / test / extension / numeric / kernel.cpp
... / ...
CommitLineData
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
17namespace gil = boost::gil;
18
19void 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
29void 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
43void 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
53void 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
66void 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
77void 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
91void 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
103void 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
119void 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
132void 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
149void 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
159void 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
184int 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}