]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/test/test/test-organization-ts/datasets-test/mono-join-test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / test / test / test-organization-ts / datasets-test / mono-join-test.cpp
CommitLineData
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>
20namespace 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
28BOOST_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.
150BOOST_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