• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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