From c2c44b892362c1f94867b967d2cfa982e15cde5f Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Fri, 23 Oct 2020 09:48:58 +0200 Subject: [PATCH] any_image_view use inheriting constructors and add constructor tests --- .../dynamic_image/any_image_view.hpp | 12 +- .../dynamic_image/any_image_view.cpp | 103 +++++++++++++++++- 2 files changed, 104 insertions(+), 11 deletions(-) diff --git a/include/boost/gil/extension/dynamic_image/any_image_view.hpp b/include/boost/gil/extension/dynamic_image/any_image_view.hpp index fe138185b0..5d71b588b0 100644 --- a/include/boost/gil/extension/dynamic_image/any_image_view.hpp +++ b/include/boost/gil/extension/dynamic_image/any_image_view.hpp @@ -1,5 +1,6 @@ // // Copyright 2005-2007 Adobe Systems Incorporated +// Copyright 2020 Samuel Debionne // // Distributed under the Boost Software License, Version 1.0 // See accompanying file LICENSE_1_0.txt or copy at @@ -82,16 +83,7 @@ class any_image_view : public variant2::variant using point_t = point; using size_type = std::size_t; - any_image_view() = default; - any_image_view(any_image_view const& view) : parent_t((parent_t const&)view) {} - - template - explicit any_image_view(View const& view) : parent_t(view) {} - - template - any_image_view(any_image_view const& view) - : parent_t((variant2::variant const&)view) - {} + using parent_t::parent_t; any_image_view& operator=(any_image_view const& view) { diff --git a/test/extension/dynamic_image/any_image_view.cpp b/test/extension/dynamic_image/any_image_view.cpp index 6f47d1ddab..176e7f25b2 100644 --- a/test/extension/dynamic_image/any_image_view.cpp +++ b/test/extension/dynamic_image/any_image_view.cpp @@ -19,9 +19,110 @@ namespace gil = boost::gil; namespace fixture = boost::gil::test::fixture; -int main() +void test_any_image_view_nested_types() { BOOST_TEST_TRAIT_SAME(gil::any_image_view::const_t, gil::any_image_view); +} + + +struct test_any_image_view_init_ctor +{ + template + void operator()(Image const&) + { + using image_t = Image; + using view_t = typename Image::view_t; + using any_view_t = gil::any_image_view; + using any_const_view_t = typename any_view_t::const_t; + Image i0(fixture::create_image(4, 4, 128)); + + view_t v0 = gil::view(i0); + any_view_t v1 = v0; + + BOOST_TEST_EQ(v1.dimensions().x, 4); + BOOST_TEST_EQ(v1.dimensions().y, 4); + + any_const_view_t v2 = v0; + + BOOST_TEST_EQ(v2.dimensions().x, 4); + BOOST_TEST_EQ(v2.dimensions().y, 4); + + //any_const_view_t v3 = v1; + } + static void run() + { + boost::mp11::mp_for_each(test_any_image_view_init_ctor{}); + } +}; + +struct test_any_image_view_copy_ctor +{ + template + void operator()(Image const&) + { + using image_t = Image; + using view_t = typename Image::view_t; + using any_view_t = gil::any_image_view; + using any_const_view_t = typename any_view_t::const_t; + Image i0(fixture::create_image(4, 4, 128)); + + view_t v0 = gil::view(i0); + any_view_t v1 = v0; + + BOOST_TEST_EQ(v1.dimensions().x, 4); + BOOST_TEST_EQ(v1.dimensions().y, 4); + + any_const_view_t v2 = v0; + + BOOST_TEST_EQ(v2.dimensions().x, 4); + BOOST_TEST_EQ(v2.dimensions().y, 4); + + //any_const_view_t v3 = v1; + } + static void run() + { + boost::mp11::mp_for_each(test_any_image_view_copy_ctor{}); + } +}; + +struct test_any_image_view_assign_operator +{ + template + void operator()(Image const&) + { + using image_t = Image; + using view_t = typename Image::view_t; + using any_view_t = gil::any_image_view; + using any_const_view_t = typename any_view_t::const_t; + Image i0(fixture::create_image(4, 4, 128)); + + view_t v0 = gil::view(i0); + any_view_t v1; + any_const_view_t v2; + + v1 = v0; + + BOOST_TEST_EQ(v1.dimensions().x, 4); + BOOST_TEST_EQ(v1.dimensions().y, 4); + + v2 = v0; + + BOOST_TEST_EQ(v2.dimensions().x, 4); + BOOST_TEST_EQ(v2.dimensions().y, 4); + + //v2 = v1; + } + static void run() + { + boost::mp11::mp_for_each(test_any_image_view_assign_operator{}); + } +}; + +int main() +{ + test_any_image_view_init_ctor::run(); + test_any_image_view_copy_ctor::run(); + test_any_image_view_assign_operator::run(); return ::boost::report_errors(); }