// // Copyright 2019 Mateusz Loskot // Copyright 2019 Miral Shah // // Distributed under the Boost Software License, Version 1.0 // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // #define BOOST_DISABLE_ASSERTS 1 // kernel_1d_adaptor assertions are too strict #include #include #include #include namespace gil = boost::gil; void test_kernel_1d_default_constructor() { gil::kernel_1d k; BOOST_TEST_EQ(k.center(), 0); BOOST_TEST_EQ(k.left_size(), 0); BOOST_TEST_EQ(static_cast(k.right_size()), -1); // std::vector interface BOOST_TEST_EQ(k.size(), 0); } void test_kernel_2d_default_constructor() { gil::detail::kernel_2d k; BOOST_TEST_EQ(k.center_y(), 0); BOOST_TEST_EQ(k.center_x(), 0); //BOOST_TEST_EQ(k.left_size(), 0); //BOOST_TEST_EQ(k.right_size(), -1); BOOST_TEST_EQ(k.upper_size(), 0); BOOST_TEST_EQ(static_cast(k.lower_size()), -1); // std::vector interface BOOST_TEST_EQ(k.size(), 0); } void test_kernel_1d_parameterized_constructor() { gil::kernel_1d k(9, 4); BOOST_TEST_EQ(k.center(), 4); BOOST_TEST_EQ(k.left_size(), 4); BOOST_TEST_EQ(k.right_size(), 4); // std::vector interface BOOST_TEST_EQ(k.size(), 9); } void test_kernel_2d_parameterized_constructor() { gil::detail::kernel_2d k(9, 4, 4); BOOST_TEST_EQ(k.center_y(), 4); BOOST_TEST_EQ(k.center_x(), 4); BOOST_TEST_EQ(k.left_size(), 4); BOOST_TEST_EQ(k.right_size(), 4); BOOST_TEST_EQ(k.upper_size(), 4); BOOST_TEST_EQ(k.lower_size(), 4); // std::vector interface BOOST_TEST_EQ(k.size(), 9); } void test_kernel_1d_parameterized_constructor_with_iterator() { std::vector v(9); gil::kernel_1d k(v.cbegin(), v.size(), 4); BOOST_TEST_EQ(k.center(), 4); BOOST_TEST_EQ(k.left_size(), 4); BOOST_TEST_EQ(k.right_size(), 4); // std::vector interface BOOST_TEST_EQ(k.size(), 9); } void test_kernel_2d_parameterized_constructor_with_iterator() { std::vector v(81); gil::detail::kernel_2d k(v.cbegin(), v.size(), 4, 4); BOOST_TEST_EQ(k.center_y(), 4); BOOST_TEST_EQ(k.center_x(), 4); BOOST_TEST_EQ(k.left_size(), 4); BOOST_TEST_EQ(k.right_size(), 4); BOOST_TEST_EQ(k.upper_size(), 4); BOOST_TEST_EQ(k.lower_size(), 4); // std::vector interface BOOST_TEST_EQ(k.size(), 9); } void test_kernel_1d_copy_constructor() { gil::kernel_1d d(9, 4); gil::kernel_1d k(d); BOOST_TEST_EQ(k.center(), 4); BOOST_TEST_EQ(k.center(), d.center()); BOOST_TEST_EQ(k.left_size(), d.left_size()); BOOST_TEST_EQ(k.right_size(), d.right_size()); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); } void test_kernel_2d_copy_constructor() { gil::detail::kernel_2d d(9, 4, 4); gil::detail::kernel_2d k(d); BOOST_TEST_EQ(k.center_y(), 4); BOOST_TEST_EQ(k.center_x(), 4); BOOST_TEST_EQ(k.center_y(), d.center_y()); BOOST_TEST_EQ(k.center_x(), d.center_x()); BOOST_TEST_EQ(k.left_size(), d.left_size()); BOOST_TEST_EQ(k.right_size(), d.right_size()); BOOST_TEST_EQ(k.lower_size(), d.lower_size()); BOOST_TEST_EQ(k.upper_size(), d.upper_size()); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); } void test_kernel_1d_assignment_operator() { gil::kernel_1d d(9, 4); gil::kernel_1d k; k = d; BOOST_TEST_EQ(k.center(), 4); BOOST_TEST_EQ(k.center(), d.center()); BOOST_TEST_EQ(k.left_size(), d.left_size()); BOOST_TEST_EQ(k.right_size(), d.right_size()); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); } void test_kernel_2d_assignment_operator() { gil::detail::kernel_2d d(9, 4, 4); gil::detail::kernel_2d k; k = d; BOOST_TEST_EQ(k.center_y(), 4); BOOST_TEST_EQ(k.center_x(), 4); BOOST_TEST_EQ(k.center_y(), d.center_y()); BOOST_TEST_EQ(k.center_x(), d.center_x()); BOOST_TEST_EQ(k.left_size(), d.left_size()); BOOST_TEST_EQ(k.right_size(), d.right_size()); BOOST_TEST_EQ(k.lower_size(), d.lower_size()); BOOST_TEST_EQ(k.upper_size(), d.upper_size()); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); } void test_kernel_1d_reverse_kernel() { gil::kernel_1d d(12, 4); BOOST_TEST_EQ(d.center(), 4); auto k = gil::reverse_kernel(d); BOOST_TEST_EQ(k.center(), d.right_size()); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); } void test_kernel_2d_reverse_kernel() { std::vector data = {1, 2, 3, 4, 5, 6, 7, 8, 9}; gil::detail::kernel_2d d(data.begin(), data.size(), 2, 0); BOOST_TEST_EQ(d.center_x(), 0); BOOST_TEST_EQ(d.center_y(), 2); auto k = gil::detail::reverse_kernel(d); BOOST_TEST_EQ(k.center_x(), d.lower_size()); BOOST_TEST_EQ(k.center_x(), 0); BOOST_TEST_EQ(k.center_y(), d.right_size()); BOOST_TEST_EQ(k.center_y(), 2); // std::vector interface BOOST_TEST_EQ(k.size(), d.size()); for (size_t i = 0; i < k.size() * k.size(); i++) { BOOST_TEST_EQ(d[i], k[(k.size()*k.size()) - 1 - i]); } } int main() { test_kernel_1d_default_constructor(); test_kernel_2d_default_constructor(); test_kernel_1d_parameterized_constructor(); test_kernel_2d_parameterized_constructor(); test_kernel_1d_parameterized_constructor_with_iterator(); test_kernel_2d_parameterized_constructor_with_iterator(); test_kernel_1d_copy_constructor(); test_kernel_2d_copy_constructor(); test_kernel_1d_assignment_operator(); test_kernel_2d_assignment_operator(); test_kernel_1d_reverse_kernel(); test_kernel_2d_reverse_kernel(); return ::boost::report_errors(); }