]> git.proxmox.com Git - ceph.git/blame - 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
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
17namespace gil = boost::gil;
18
f67539c2 19void 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 29void 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 43void 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 53void 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 66void 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 77void 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 91void 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 103void 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 119void 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 132void 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 149void 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
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
f67539c2 184int 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}