]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/util/transform_variant.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / geometry / test / util / transform_variant.cpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 // Unit Test
3
4 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
5 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
6 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
7
8 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
9 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
10
11 // Use, modification and distribution is subject to the Boost Software License,
12 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
13 // http://www.boost.org/LICENSE_1_0.txt)
14
15
16 #include <boost/test/included/test_exec_monitor.hpp>
17 #include <boost/geometry/util/transform_variant.hpp>
18 #include <boost/mpl/assert.hpp>
19 #include <boost/mpl/equal.hpp>
20 #include <boost/mpl/placeholders.hpp>
21 #include <boost/mpl/vector.hpp>
22 #include <boost/type_traits.hpp>
23 #include <boost/variant/variant.hpp>
24
25 using boost::mpl::placeholders::_;
26
27
28 template <typename ExpectedTypes, BOOST_VARIANT_ENUM_PARAMS(typename T)>
29 void check(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>)
30 {
31 BOOST_MPL_ASSERT((
32 boost::mpl::equal<
33 typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
34 ExpectedTypes
35 >
36 ));
37 }
38
39
40 int test_main(int, char* [])
41 {
42 // Transform Variant to Variant
43 typedef boost::geometry::transform_variant<
44 boost::variant<int, float, long>,
45 boost::add_pointer<_>
46 >::type transformed1;
47
48 check<boost::mpl::vector<int*, float*, long*> >(transformed1());
49
50 // Transform Sequence to Variant (without inserter)
51 typedef boost::geometry::transform_variant<
52 boost::mpl::vector<int, float, long>,
53 boost::add_pointer<_>
54 >::type transformed2;
55
56 check<boost::mpl::vector<int*, float*, long*> >(transformed2());
57
58 // Transform Sequence to Variant (with inserter)
59 typedef boost::geometry::transform_variant<
60 boost::mpl::vector<int, float, long>,
61 boost::add_pointer<_>,
62 boost::mpl::back_inserter<boost::mpl::vector0<> >
63 >::type transformed3;
64
65 check<boost::mpl::vector<int*, float*, long*> >(transformed3());
66
67 return 0;
68 }