• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2016-2017 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/poly_collection for library home page.
7  */
8 
9 #include "test_registration.hpp"
10 
11 #include <boost/core/lightweight_test.hpp>
12 #include <iterator>
13 #include "any_types.hpp"
14 #include "base_types.hpp"
15 #include "function_types.hpp"
16 #include "test_utilities.hpp"
17 
18 using namespace test_utilities;
19 
20 template<typename PolyCollection,typename Type>
test_registration()21 void test_registration()
22 {
23   using unregistered_type=boost::poly_collection::unregistered_type;
24 
25   {
26     PolyCollection        p;
27     const PolyCollection& cp=p;
28 
29     BOOST_TEST(!p.is_registered(typeid(Type)));
30     BOOST_TEST(!p.template is_registered<Type>());
31     check_throw<unregistered_type>(
32       [&]{(void)p.begin(typeid(Type));},
33       [&]{(void)p.end(typeid(Type));},
34       [&]{(void)cp.begin(typeid(Type));},
35       [&]{(void)cp.end(typeid(Type));},
36       [&]{(void)p.cbegin(typeid(Type));},
37       [&]{(void)p.cend(typeid(Type));},
38       [&]{(void)p.template begin<Type>();},
39       [&]{(void)p.template end<Type>();},
40       [&]{(void)cp.template begin<Type>();},
41       [&]{(void)cp.template end<Type>();},
42       [&]{(void)p.template cbegin<Type>();},
43       [&]{(void)p.template cend<Type>();},
44       [&]{(void)p.segment(typeid(Type));},
45       [&]{(void)cp.segment(typeid(Type));},
46       [&]{(void)p.template segment<Type>();},
47       [&]{(void)cp.template segment<Type>();},
48       [&]{(void)cp.empty(typeid(Type));},
49       [&]{(void)cp.size(typeid(Type));},
50       [&]{(void)cp.max_size(typeid(Type));},
51       [&]{(void)p.reserve(typeid(Type),0);},
52       [&]{(void)cp.capacity(typeid(Type));},
53       [&]{(void)p.shrink_to_fit(typeid(Type));},
54       [&]{(void)p.clear(typeid(Type));},
55       [&]{(void)cp.template empty<Type>();},
56       [&]{(void)cp.template size<Type>();},
57       [&]{(void)cp.template max_size<Type>();},
58       /* reserve<Type> omitted as it actually registers the type */
59       [&]{(void)cp.template capacity<Type>();},
60       [&]{(void)p.template shrink_to_fit<Type>();},
61       [&]{(void)p.template clear<Type>();});
62 
63     p.register_types();
64     p.template register_types<>();
65     BOOST_TEST(!p.is_registered(typeid(Type)));
66 
67     p.template register_types<Type>();
68 
69     BOOST_TEST(p.is_registered(typeid(Type)));
70     BOOST_TEST(p.template is_registered<Type>());
71     (void)p.end(typeid(Type));
72     (void)cp.begin(typeid(Type));
73     (void)cp.end(typeid(Type));
74     (void)p.cbegin(typeid(Type));
75     (void)p.cend(typeid(Type));
76     (void)p.template begin<Type>();
77     (void)p.template end<Type>();
78     (void)cp.template begin<Type>();
79     (void)cp.template end<Type>();
80     (void)cp.template cbegin<Type>();
81     (void)cp.template cend<Type>();
82     (void)cp.empty(typeid(Type));
83     (void)cp.size(typeid(Type));
84     (void)cp.max_size(typeid(Type));
85     (void)p.reserve(typeid(Type),0);
86     (void)cp.capacity(typeid(Type));
87     (void)p.shrink_to_fit(typeid(Type));
88     (void)p.clear(typeid(Type));
89     (void)cp.template empty<Type>();
90     (void)cp.template size<Type>();
91     (void)cp.template max_size<Type>();
92     /* reserve<Type> omitted */
93     (void)cp.template capacity<Type>();
94     (void)p.template shrink_to_fit<Type>();
95     (void)p.template clear<Type>();
96   }
97 
98   {
99     PolyCollection p;
100     p.template reserve<Type>(0);
101     BOOST_TEST(p.is_registered(typeid(Type)));
102   }
103 
104   {
105     PolyCollection p;
106     p.template register_types<Type,Type,Type>();
107     BOOST_TEST(p.is_registered(typeid(Type)));
108     BOOST_TEST(
109       std::distance(
110         p.segment_traversal().begin(),p.segment_traversal().end())==1);
111   }
112 }
113 
test_registration()114 void test_registration()
115 {
116   test_registration<any_types::collection,any_types::t1>();
117   test_registration<base_types::collection,base_types::t1>();
118   test_registration<function_types::collection,function_types::t1>();
119 }
120