]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // (C) Copyright Gennadiy Rozental 2011-2015. |
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/test for the library home page. | |
7 | // | |
8 | /// @file | |
9 | /// @brief tests monomorphic join | |
10 | // *************************************************************************** | |
11 | ||
12 | // Boost.Test | |
13 | #include <boost/test/unit_test.hpp> | |
14 | #include <boost/test/data/monomorphic/join.hpp> | |
15 | #include <boost/test/data/monomorphic/singleton.hpp> | |
16 | #include <boost/test/data/monomorphic/array.hpp> | |
17 | #include <boost/test/data/monomorphic/collection.hpp> | |
92f5a8d4 | 18 | #include <boost/test/data/monomorphic/fwd.hpp> |
7c673cae FG |
19 | #include <boost/test/data/for_each_sample.hpp> |
20 | namespace data=boost::unit_test::data; | |
21 | ||
92f5a8d4 TL |
22 | #include <boost/test/data/test_case.hpp> |
23 | ||
7c673cae FG |
24 | #include "datasets-test.hpp" |
25 | ||
26 | //____________________________________________________________________________// | |
27 | ||
28 | BOOST_AUTO_TEST_CASE( test_mono_join ) | |
29 | { | |
30 | BOOST_TEST( (data::make( 1 ) + data::make( 5 )).size() == 2 ); | |
31 | BOOST_TEST( (data::make( std::vector<int>(2) ) + data::make( std::list<int>(3) )).size() == 5 ); | |
32 | ||
33 | int arr1[] = {1,2}; | |
34 | int arr2[] = {7,19}; | |
35 | BOOST_TEST( (data::make( arr1 ) + data::make( arr2 )).size() == 4 ); | |
36 | ||
37 | BOOST_TEST( (data::make( 1 ) + data::make( 5 ) + data::make( 19 )).size() == 3 ); | |
38 | ||
39 | BOOST_TEST( (data::make( std::vector<int>(2) ) + data::make( 1 ) + data::make( arr2 ) + data::make( 17 )).size() == 6 ); | |
40 | ||
41 | int expected[] = {1,2,5,7,19,37}; | |
42 | int* exp = expected; | |
43 | int c = 0; | |
44 | invocation_count ic; | |
45 | ||
46 | auto samples1 = data::make( std::vector<int>(arr1,arr1+2) ) + data::make( 5 ) + data::make( arr2 ) + data::make( 37 ); | |
47 | ||
48 | ic.m_value = 0; | |
49 | data::for_each_sample( samples1, ic ); | |
50 | BOOST_TEST( ic.m_value == 6 ); | |
51 | ||
52 | c = 0; | |
53 | data::for_each_sample( samples1, [&c,exp](int i) { | |
54 | BOOST_TEST( i == exp[c++] ); | |
55 | }); | |
56 | ||
57 | auto samples2 = data::make( std::vector<int>(arr1,arr1+2) ) + (data::make( 5 ) + (data::make( arr2 ) + data::make( 37 ))); | |
58 | ||
59 | ic.m_value = 0; | |
60 | data::for_each_sample( samples2, ic ); | |
61 | BOOST_TEST( ic.m_value == 6 ); | |
62 | ||
63 | c = 0; | |
64 | data::for_each_sample( samples2, [&c,exp](int i) { | |
65 | BOOST_TEST( i == exp[c++] ); | |
66 | }); | |
67 | ||
68 | auto samples3 = (data::make( std::vector<int>(arr1,arr1+2) ) + data::make( 5 )) + (data::make( arr2 ) + data::make( 37 )); | |
69 | ||
70 | ic.m_value = 0; | |
71 | data::for_each_sample( samples3, ic ); | |
72 | BOOST_TEST( ic.m_value == 6 ); | |
73 | ||
74 | c = 0; | |
75 | data::for_each_sample( samples3, [&c,exp](int i) { | |
76 | BOOST_TEST( i == exp[c++] ); | |
77 | }); | |
78 | ||
79 | copy_count::value() = 0; | |
80 | data::for_each_sample( data::make( copy_count() ) + data::make( copy_count() ), check_arg_type<copy_count>() ); | |
81 | BOOST_TEST( copy_count::value() == 0 ); | |
82 | ||
83 | copy_count::value() = 0; | |
84 | data::for_each_sample( data::make( copy_count() ) + data::make( copy_count() ) + data::make( copy_count() ), check_arg_type<copy_count>() ); | |
85 | BOOST_TEST( copy_count::value() == 0 ); | |
86 | ||
87 | copy_count::value() = 0; | |
88 | data::for_each_sample( data::make( copy_count() ) + (data::make( copy_count() ) + data::make( copy_count() )), check_arg_type<copy_count>() ); | |
89 | BOOST_TEST( copy_count::value() == 0 ); | |
90 | copy_count::value() = 0; | |
91 | data::for_each_sample( (data::make( copy_count() ) + data::make( copy_count() )) + | |
92 | (data::make( copy_count() ) + data::make( copy_count() )), check_arg_type<copy_count>() ); | |
93 | BOOST_TEST( copy_count::value() == 0 ); | |
94 | ||
95 | auto ds1 = data::make( copy_count() ); | |
96 | auto const ds2 = data::make( copy_count() ); | |
97 | ||
98 | copy_count::value() = 0; | |
99 | data::for_each_sample( ds1 + ds1, check_arg_type<copy_count>() ); | |
100 | BOOST_TEST( copy_count::value() == 0 ); | |
101 | ||
102 | copy_count::value() = 0; | |
103 | data::for_each_sample( ds2 + ds2, check_arg_type<copy_count>() ); | |
104 | BOOST_TEST( copy_count::value() == 0 ); | |
105 | ||
106 | copy_count::value() = 0; | |
107 | data::for_each_sample( ds1 + ds2, check_arg_type<copy_count>() ); | |
108 | BOOST_TEST( copy_count::value() == 0 ); | |
109 | ||
110 | copy_count::value() = 0; | |
111 | auto jn1 = ds1 + data::make( copy_count() ); | |
112 | data::for_each_sample( jn1, check_arg_type<copy_count>() ); | |
113 | BOOST_TEST( copy_count::value() == 0 ); | |
114 | ||
115 | copy_count::value() = 0; | |
116 | data::for_each_sample( data::make( copy_count() ) + ds1, check_arg_type<copy_count>() ); | |
117 | BOOST_TEST( copy_count::value() == 0 ); | |
118 | ||
119 | copy_count::value() = 0; | |
120 | data::for_each_sample( ds1 + ds2 + ds1, check_arg_type<copy_count>() ); | |
121 | BOOST_TEST( copy_count::value() == 0 ); | |
122 | ||
123 | copy_count::value() = 0; | |
124 | data::for_each_sample( ds1 + (ds1 + ds2), check_arg_type<copy_count>() ); | |
125 | BOOST_TEST( copy_count::value() == 0 ); | |
126 | ||
127 | copy_count::value() = 0; | |
128 | data::for_each_sample( (ds1 + ds1) + (ds2 + ds2), check_arg_type<copy_count>() ); | |
129 | BOOST_TEST( copy_count::value() == 0 ); | |
130 | ||
131 | copy_count::value() = 0; | |
132 | int std_vector_constructor_count = 0; | |
133 | { | |
134 | std::vector<copy_count> v(2); // we cannot do better than std::vector constructor | |
135 | std_vector_constructor_count = copy_count::value()/2; | |
136 | } | |
137 | ||
138 | copy_count::value() = 0; | |
139 | auto ds3 = data::make( make_copy_count_collection() ) + data::make( make_copy_count_collection() ); | |
140 | BOOST_TEST( ds3.size() == 6 ); | |
141 | data::for_each_sample( ds3, check_arg_type<copy_count>() ); | |
142 | BOOST_TEST( copy_count::value() == std_vector_constructor_count * 2 * 3 ); | |
143 | } | |
144 | ||
145 | //____________________________________________________________________________// | |
146 | ||
92f5a8d4 TL |
147 | // ticket 13380 |
148 | // note that the test relies on the fact that the references to temporaries are properly | |
149 | // escalated as errors. Currently only on clang. | |
150 | BOOST_DATA_TEST_CASE( | |
151 | sampleTest, | |
152 | (data::make(1) ^ data::make(2)) + (data::make(3) ^ data::make(4)), | |
153 | var1, | |
154 | var2) | |
155 | { | |
156 | std::cout << var1 << "," << var2 << std::endl; | |
157 | } | |
7c673cae | 158 | // EOF |