Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / test / test / test-organization-ts / datasets-test / test_case_interface-test.cpp
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 singleton dataset
13 // ***************************************************************************
14
15 // Boost.Test
16 #include <boost/test/unit_test.hpp>
17
18 #include <boost/test/data/test_case.hpp>
19 #include <boost/test/data/monomorphic.hpp>
20 namespace data=boost::unit_test::data;
21
22 #include "datasets-test.hpp"
23
24 //____________________________________________________________________________//
25
26 int samples1[] = {1,2,3};
27 int index1 = 0;
28
29 BOOST_DATA_TEST_CASE( test_case_interface_01, data::make({1,2,3}) )
30 {
31     BOOST_TEST( sample == samples1[index1++] );
32 }
33
34 //____________________________________________________________________________//
35
36 std::vector<std::string> samples2 = {"qwerty","asdfg"};
37 int index2 = 0;
38
39 BOOST_DATA_TEST_CASE( test_case_interface_02, samples2, str )
40 {
41     BOOST_TEST( str == samples2[index2++] );
42 }
43
44 //____________________________________________________________________________//
45
46 int samples3[] = {7,9};
47 int index3 = 0;
48
49 BOOST_DATA_TEST_CASE( test_case_interface_03, data::make({1,2,3}) + samples3, val )
50 {
51     if( index3 < 3 )
52         BOOST_TEST( val == samples1[index3] );
53     else
54         BOOST_TEST( val == samples3[index3-3] );
55
56     ++index3;
57 }
58
59 //____________________________________________________________________________//
60
61 int index4 = 0;
62
63 BOOST_DATA_TEST_CASE( test_case_interface_04, samples2 ^ data::make({7,9}), str, intval )
64 {
65     BOOST_TEST( str == samples2[index4] );
66     BOOST_TEST( intval == samples3[index4] );
67
68     ++index4;
69 }
70
71 //____________________________________________________________________________//
72
73 int index5 = 0;
74
75 BOOST_DATA_TEST_CASE( test_case_interface_05, samples1 * samples2, sample0, sample1 )
76 {
77     BOOST_TEST( sample0 == samples1[index5/2] );
78     BOOST_TEST( sample1 == samples2[index5%2] );
79
80     ++index5;
81 }
82
83 //____________________________________________________________________________//
84
85 int index6 = 0;
86
87 BOOST_DATA_TEST_CASE( test_case_interface_06, samples1 * samples2 * samples3, intval, str, val2 )
88 {
89     BOOST_TEST( intval == samples1[index6/4] );
90     BOOST_TEST( str == samples2[(index6/2)%2] );
91     BOOST_TEST( val2 == samples3[index6%2] );
92
93     ++index6;
94 }
95
96 //____________________________________________________________________________//
97
98 // test dataset dim > 3
99 int index7 = 0;
100
101 float samples4[] = {1E3f, 1E-3f, 3.14f};
102
103 #define sizeoftable(x) (sizeof(x)/sizeof(x[0]))
104
105 BOOST_DATA_TEST_CASE( test_case_interface_07, samples1 * samples2 * samples3 * samples4, intval, str, val2, floatval )
106 {
107     BOOST_TEST_CONTEXT("index7 " << index7) {
108       BOOST_TEST( intval == samples1[index7/(sizeoftable(samples4)*sizeoftable(samples3)*samples2.size())] );
109       BOOST_TEST( str == samples2[(index7/(sizeoftable(samples4)*sizeoftable(samples3)))%samples2.size()] );
110       BOOST_TEST( val2 == samples3[(index7/sizeoftable(samples4))%sizeoftable(samples3)] );
111       BOOST_TEST( floatval == samples4[index7%sizeoftable(samples4)] );
112     }
113     ++index7;
114 }
115
116 //____________________________________________________________________________//
117
118 static int index8 = 1;
119
120 struct SharedFixture {
121     SharedFixture()
122     : m_expected(index8++)
123     {
124     }
125
126     int m_expected;
127 };
128
129 BOOST_DATA_TEST_CASE_F( SharedFixture, test_case_interface_08, data::make({1,2,3}) )
130 {
131     BOOST_TEST( sample == m_expected );
132 }
133
134 //____________________________________________________________________________//
135
136 BOOST_DATA_TEST_CASE(test_case_interface_correct_file_line_declaration, samples2)
137 {
138   boost::unit_test::test_case const& current_test_case = boost::unit_test::framework::current_test_case();
139   BOOST_TEST(current_test_case.p_line_num == 136);
140   BOOST_TEST(current_test_case.p_file_name == __FILE__);
141 }
142
143 //____________________________________________________________________________//
144 // ticket 13443
145
146 BOOST_DATA_TEST_CASE( 
147   test_arity_above_9,
148   data::make( { 1, 2, 3, 5 } ) ^
149   data::make( { 1, 2, 3, 5 } ) ^
150   data::make( { 1, 2, 3, 5 } ) ^
151   data::make( { 1, 2, 3, 5 } ) ^
152   data::make( { 1, 2, 3, 5 } ) ^
153   data::make( { 1, 2, 3, 5 } ) ^
154   data::make( { 1, 2, 3, 5 } ) ^
155   data::make( { 1, 2, 3, 5 } ) ^
156   data::make( { 1, 2, 3, 5 } ) ^
157   data::make( { 1, 2, 3, 5 } ),
158   sample1, sample2, sample3, sample4, sample5, sample6, sample7, sample8, sample9, sample10)
159 {
160 }
161
162 //____________________________________________________________________________//
163
164 BOOST_AUTO_TEST_CASE( test_has_dataset )
165 {
166     using t1 = decltype(data::make( 1 ));
167     BOOST_TEST((data::monomorphic::has_dataset<t1>::value));
168   
169     BOOST_TEST((data::monomorphic::has_dataset<int, t1>::value));
170     BOOST_TEST((!data::monomorphic::has_dataset<int, float>::value));
171 }
172
173 //____________________________________________________________________________//
174
175
176 static int index_fixture_setup_teardown = 0;
177
178 struct SharedFixtureSetupTeardown {
179     SharedFixtureSetupTeardown()
180     : m_expected(1 + index_fixture_setup_teardown)
181     {}
182
183     void setup() {
184       m_expected *= m_expected;
185     }
186
187     void teardown() {
188       index_fixture_setup_teardown++;
189     }
190
191     int m_expected;
192 };
193
194 BOOST_DATA_TEST_CASE_F( SharedFixtureSetupTeardown, test_case_interface_setup_teardown, data::make({0,1,2,3}) )
195 {
196     BOOST_TEST( sample == index_fixture_setup_teardown );
197     BOOST_TEST( m_expected == (1+sample)*(1+sample));
198 }
199
200 //____________________________________________________________________________//
201 // GH-217
202
203 #ifndef BOOST_TEST_ERRONEOUS_INIT_LIST
204
205 const bool ExpectedValues[] = { false, true, true, true, false, false};
206 BOOST_DATA_TEST_CASE(BoostDataTest
207   , boost::unit_test::data::make({ false, true, true, true, false, false }) ^
208     boost::unit_test::data::make(ExpectedValues)
209   , value, expectedValue)
210 {
211   BOOST_TEST(value == expectedValue);
212 }
213 #endif
214
215 // EOF