• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Ion Gaztanaga 2004-2019. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // See http://www.boost.org/libs/container for documentation.
8 //
9 //////////////////////////////////////////////////////////////////////////////
10 #include <boost/container/flat_set.hpp>
11 #include <boost/container/small_vector.hpp>
12 #include <boost/container/static_vector.hpp>
13 #include <boost/container/stable_vector.hpp>
14 #include <boost/container/vector.hpp>
15 #include <boost/container/deque.hpp>
16 #include <boost/static_assert.hpp>
17 
18 #include <boost/container/detail/container_or_allocator_rebind.hpp>
19 
20 #include "set_test.hpp"
21 #include <set>
22 
23 using namespace boost::container;
24 
25 template<class VoidAllocatorOrContainer>
26 struct GetSetContainer
27 {
28    template<class ValueType>
29    struct apply
30    {
31       typedef flat_set < ValueType
32                        , std::less<ValueType>
33                        , typename boost::container::dtl::container_or_allocator_rebind<VoidAllocatorOrContainer, ValueType>::type
34                         > set_type;
35 
36       typedef flat_multiset < ValueType
37                             , std::less<ValueType>
38                             , typename boost::container::dtl::container_or_allocator_rebind<VoidAllocatorOrContainer, ValueType>::type
39                             > multiset_type;
40    };
41 };
42 
main()43 int main()
44 {
45    using namespace boost::container::test;
46 
47    ////////////////////////////////////
48    //    Testing sequence container implementations
49    ////////////////////////////////////
50    {
51       typedef std::set<int>                                     MyStdSet;
52       typedef std::multiset<int>                                MyStdMultiSet;
53 
54       if (0 != test::set_test
55          < GetSetContainer<vector<int> >::apply<int>::set_type
56          , MyStdSet
57          , GetSetContainer<vector<int> >::apply<int>::multiset_type
58          , MyStdMultiSet>()) {
59          std::cout << "Error in set_test<vector<int> >" << std::endl;
60          return 1;
61       }
62 
63       if (0 != test::set_test
64          < GetSetContainer<small_vector<int, 7> >::apply<int>::set_type
65          , MyStdSet
66          , GetSetContainer<small_vector<int, 7> >::apply<int>::multiset_type
67          , MyStdMultiSet>()) {
68          std::cout << "Error in set_test<small_vector<int, 7> >" << std::endl;
69          return 1;
70       }
71 
72        if (0 != test::set_test
73          < GetSetContainer<static_vector<int, MaxElem * 10> >::apply<int>::set_type
74          , MyStdSet
75          , GetSetContainer<static_vector<int, MaxElem * 10> >::apply<int>::multiset_type
76          , MyStdMultiSet>()) {
77          std::cout << "Error in set_test<static_vector<int, MaxElem * 10> >" << std::endl;
78          return 1;
79       }
80 
81       if (0 != test::set_test
82          < GetSetContainer<stable_vector<int> >::apply<int>::set_type
83          , MyStdSet
84          , GetSetContainer<stable_vector<int> >::apply<int>::multiset_type
85          , MyStdMultiSet>()) {
86          std::cout << "Error in set_test<stable_vector<int> >" << std::endl;
87          return 1;
88       }
89 
90 
91       if (0 != test::set_test
92          < GetSetContainer<deque<int> >::apply<int>::set_type
93          , MyStdSet
94          , GetSetContainer<deque<int> >::apply<int>::multiset_type
95          , MyStdMultiSet>()) {
96          std::cout << "Error in set_test<deque<int> >" << std::endl;
97          return 1;
98       }
99    }
100    {
101       using namespace boost::container;
102       using boost::container::dtl::is_same;
103 
104       typedef flat_set<int, std::less<int>, small_vector<int, 10> > set_container_t;
105       typedef flat_multiset<int, std::less<int>, small_vector<int, 10> > multiset_container_t;
106       #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
107       BOOST_STATIC_ASSERT(( is_same<set_container_t, small_flat_set<int, 10> >::value ));
108       BOOST_STATIC_ASSERT(( is_same<multiset_container_t, small_flat_multiset<int, 10> >::value ));
109       #endif
110       BOOST_STATIC_ASSERT(( is_same<set_container_t, small_flat_set_of<int, 10>::type >::value ));
111       BOOST_STATIC_ASSERT(( is_same<multiset_container_t, small_flat_multiset_of<int, 10>::type >::value ));
112    }
113 
114    return 0;
115 }
116