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 /// Tests C array based dataset
10 // ***************************************************************************
11
12 // Boost.Test
13 #include <boost/test/unit_test.hpp>
14 #include <boost/test/data/monomorphic/array.hpp>
15 #include <boost/test/data/for_each_sample.hpp>
16 namespace data=boost::unit_test::data;
17
18 #include "datasets-test.hpp"
19
20 //____________________________________________________________________________//
21
BOOST_AUTO_TEST_CASE(test_array)22 BOOST_AUTO_TEST_CASE( test_array )
23 {
24 int arr1[] = {1,2,3};
25 BOOST_TEST( data::make( arr1 ).size() == 3 );
26
27 double const arr2[] = {7.4,3.2};
28 BOOST_TEST( data::make( arr2 ).size() == 2 );
29
30 bool arr3[] = {true, true, false};
31 BOOST_TEST( data::make( arr3 ).size() == 3 );
32
33 typedef bool (arr_type)[3];
34 arr_type const& arr3_ref = arr3;
35 BOOST_TEST( data::make( arr3_ref ).size() == 3 );
36
37 int arr4[] = {7,11,13,17};
38 data::for_each_sample( data::make( arr4 ), check_arg_type<int>() );
39
40 int c = 0;
41 int* ptr4 = arr4;
42 data::for_each_sample( data::make( arr4 ), [&c,ptr4](int i) {
43 BOOST_TEST( i == ptr4[c++] );
44 });
45
46 data::for_each_sample( data::make( arr4 ), expected_call_count{ 4 } );
47 data::for_each_sample( data::make( arr4 ), expected_call_count{ 2 }, 2 );
48 data::for_each_sample( data::make( arr4 ), expected_call_count{ 0 }, 0 );
49
50 copy_count::value() = 0;
51 copy_count arr5[] = { copy_count(), copy_count() };
52 data::for_each_sample( data::make( arr5 ), check_arg_type<copy_count>() );
53 BOOST_TEST( copy_count::value() == 0 );
54
55 copy_count::value() = 0;
56 copy_count const arr6[] = { copy_count(), copy_count() };
57 data::for_each_sample( data::make( arr6 ), check_arg_type<copy_count>() );
58 BOOST_TEST( copy_count::value() == 0 );
59 }
60
61 //____________________________________________________________________________//
62
BOOST_AUTO_TEST_CASE(test_array_make_type)63 BOOST_AUTO_TEST_CASE( test_array_make_type )
64 {
65 int arr1[] = {1,2,3};
66
67 typedef int (&arr_t)[3];
68 BOOST_STATIC_ASSERT(( boost::is_array< boost::remove_reference<arr_t>::type >::value ) );
69
70 typedef data::result_of::make<int (&)[3]>::type dataset_array_type;
71 dataset_array_type res = data::make( arr1 );
72 BOOST_TEST( res.size() == 3 );
73
74 double const arr2[] = {7.4,3.2};
75 typedef data::result_of::make<double const (&)[2]>::type dataset_array_double_type;
76 dataset_array_double_type res2 = data::make( arr2 );
77
78 BOOST_TEST( res2.size() == 2 );
79 }
80
81 // EOF
82