]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/test/test/test-organization-ts/datasets-test/collection-test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / test / test / test-organization-ts / datasets-test / collection-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 : $RCSfile$
9//
10// Version : $Revision$
11//
12// Description : tests stl collection based dataset
13// ***************************************************************************
14
15// Boost.Test
16
17#include <boost/test/data/monomorphic/singleton.hpp>
18#include <boost/test/data/monomorphic/collection.hpp>
19#include <boost/test/data/for_each_sample.hpp>
20
21#include <boost/test/unit_test.hpp>
22namespace utf=boost::unit_test;
23namespace data=utf::data;
24
25#include "datasets-test.hpp"
26#include <vector>
27#include <list>
28
29//____________________________________________________________________________//
30
31template <typename>
32struct forwarded_to_collection : std::false_type {};
33
34template <typename T>
35struct forwarded_to_collection< data::monomorphic::collection<T> > : std::true_type {};
36
37BOOST_AUTO_TEST_CASE( test_forwarded_to_collection)
38{
39 {
40 std::vector<int> samples1;
b32b8144 41 BOOST_TEST(boost::unit_test::is_container_forward_iterable<decltype(samples1)>::value, "forward iterable");
7c673cae
FG
42 BOOST_TEST((forwarded_to_collection<decltype(data::make( samples1 ))>::value),
43 "not properly forwarded to a collection");
44 }
45 {
46 int samples1(0);
47 utf::ut_detail::ignore_unused_variable_warning( samples1 );
48
b32b8144 49 BOOST_TEST(!boost::unit_test::is_container_forward_iterable<decltype(samples1)>::value, "forward iterable");
7c673cae
FG
50 BOOST_TEST(!(forwarded_to_collection<decltype(data::make( samples1 ))>::value),
51 "not properly forwarded to a collection");
52 }
53}
54
55//____________________________________________________________________________//
56
57BOOST_AUTO_TEST_CASE( test_collection_sizes )
58{
59 BOOST_TEST( data::make( std::vector<int>() ).size() == 0 );
60 BOOST_TEST( data::make( std::vector<int>( 3 ) ).size() == 3 );
61 BOOST_TEST( data::make( std::list<double>() ).size() == 0 );
62 BOOST_TEST( data::make( std::list<double>( 2 ) ).size() == 2 );
63
64 data::for_each_sample( data::make( std::vector<int>( 3 ) ), check_arg_type<int>() );
65 data::for_each_sample( data::make( std::list<double>( 2 ) ), check_arg_type<double>() );
66
67 invocation_count ic;
68
69 ic.m_value = 0;
70 data::for_each_sample( data::make( std::vector<int>( 3 ) ), ic );
71 BOOST_TEST( ic.m_value == 3 );
72
73 ic.m_value = 0;
74 data::for_each_sample( data::make( std::list<double>( 2 ) ), ic, 4 );
75 BOOST_TEST( ic.m_value == 2 );
76
77 ic.m_value = 0;
78 data::for_each_sample( data::make( std::vector<int>( 3 ) ), ic, 1 );
79 BOOST_TEST( ic.m_value == 1 );
80}
81
82//____________________________________________________________________________//
83
84BOOST_AUTO_TEST_CASE( test_collection )
85{
86 std::vector<int> samples1;
87 samples1.push_back(5);
88 samples1.push_back(567);
89 samples1.push_back(13);
90
91 int c = 0;
92 data::for_each_sample( data::make( samples1 ), [&c,samples1](int i) {
93 BOOST_TEST( i == samples1[c++] );
94 });
95
96 std::list<char const*> samples2;
97 samples2.push_back("sd");
98 samples2.push_back("bg");
99 samples2.push_back( "we3eq3" );
100
101 auto it = samples2.begin();
102 data::for_each_sample( data::make( samples2 ), [&it](char const* str ) {
103 BOOST_TEST( str == *it++ );
104 });
105}
106
107//____________________________________________________________________________//
108
109BOOST_AUTO_TEST_CASE( test_collection_copies )
110{
111 // number of copies due to the dataset make
112 int exp_copy_count = 0;
113
114 // number of copies due to the vector constructor
115 copy_count::value() = 0;
116 int std_vector_constructor_count = 0;
117 {
118 std::vector<copy_count> v(2); // we cannot do better than std::vector constructor
119 std_vector_constructor_count = copy_count::value()/2;
120 }
121
122 copy_count::value() = 0;
123 int std_list_constructor_count = 0;
124 {
125 std::list<copy_count> v(2); // we cannot do better than std::vector constructor
126 std_list_constructor_count = copy_count::value()/2;
127 }
128
129 copy_count::value() = 0;
130
131 data::for_each_sample( data::make( std::vector<copy_count>( 2 ) ), check_arg_type<copy_count>() );
132 BOOST_TEST( copy_count::value() == (exp_copy_count + std_vector_constructor_count) * 2);
133
134 copy_count::value() = 0;
135 std::vector<copy_count> samples3( 2 );
136 data::for_each_sample( data::make( samples3 ), check_arg_type<copy_count>() );
137 BOOST_TEST( copy_count::value() == (exp_copy_count + std_vector_constructor_count) * 2);
138
139 copy_count::value() = 0;
140 std::vector<copy_count> const samples4( 2 );
141 data::for_each_sample( data::make( samples4 ), check_arg_type<copy_count>() );
142 BOOST_TEST( copy_count::value() == (exp_copy_count + std_vector_constructor_count) * 2);
143
144 copy_count::value() = 0;
145 auto ds1 = data::make( make_copy_count_collection() );
146 BOOST_TEST( ds1.size() == 3 );
147 BOOST_TEST( copy_count::value() == (exp_copy_count + std_vector_constructor_count) * 3);
148 data::for_each_sample( ds1, check_arg_type<copy_count>() );
149
150 copy_count::value() = 0;
151 auto ds2 = data::make( make_copy_count_const_collection() );
152 BOOST_TEST( ds2.size() == 3 );
153 data::for_each_sample( ds2, check_arg_type<copy_count>() );
154 BOOST_TEST( copy_count::value() == (exp_copy_count + std_list_constructor_count + 1) * 3 ); // no rvalue constructor for the dataset
155}
156
157//____________________________________________________________________________//
158
159// EOF