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 #include <boost/test/data/monomorphic/generators/xrange.hpp>
18 #include <boost/test/data/monomorphic/join.hpp>
19 namespace data=boost::unit_test::data;
20 
21 #include "datasets-test.hpp"
22 
23 //____________________________________________________________________________//
24 
BOOST_AUTO_TEST_CASE(test_single_range)25 BOOST_AUTO_TEST_CASE( test_single_range )
26 {
27     BOOST_TEST( data::xrange( 5 ).size() == 5 );
28     BOOST_TEST( data::xrange( 3. ).size() == 3 );
29     BOOST_CHECK_THROW( data::xrange( -5 ), std::logic_error );
30     BOOST_CHECK_THROW( data::xrange( 0 ), std::logic_error );
31 
32     BOOST_TEST( data::xrange( 1, 5 ).size() == 4 );
33     BOOST_TEST( data::xrange( -5, 0 ).size() == 5 );
34     BOOST_TEST( data::xrange( 1., 7.5 ).size() == 7 );
35     BOOST_CHECK_THROW( data::xrange( 0, 0 ), std::logic_error );
36     BOOST_CHECK_THROW( data::xrange( 3, 1 ), std::logic_error );
37 
38     BOOST_TEST( data::xrange( 3, 9, 2 ).size() == 3 );
39     BOOST_TEST( data::xrange( 5, 0, -1 ).size() == 5 );
40     BOOST_TEST( data::xrange( 1, 10, 2 ).size() == 5 );
41     BOOST_TEST( data::xrange( 1, 10, 3 ).size() == 3 );
42     BOOST_TEST( data::xrange( 1, 10, 8 ).size() == 2 );
43     BOOST_TEST( data::xrange( 0., 3., 0.4 ).size() == 8 );
44     BOOST_TEST( data::xrange( 1e-6, 2.e-6, 1e-9 ).size() == 1000 );
45 
46     BOOST_TEST( data::xrange<int>(( data::begin = 9, data::end = 15 )).size() == 6 );
47     BOOST_TEST( data::xrange<double>(( data::step = 0.5, data::end = 3 )).size() == 6 );
48 
49     int c = 0;
50     data::for_each_sample( data::xrange( 3 ), [&c](int a) {
51         BOOST_TEST( a == c++ );
52     });
53 
54     c = 1;
55     data::for_each_sample( data::xrange( 1, 10, 2 ), [&c](int a) {
56         BOOST_TEST( a == c );
57         c += 2;
58     });
59 }
60 
61 //____________________________________________________________________________//
62 
BOOST_AUTO_TEST_CASE(test_range_join)63 BOOST_AUTO_TEST_CASE( test_range_join )
64 {
65     auto ds = data::xrange( 1, 4 ) + data::xrange( 7, 11 );
66 
67     BOOST_TEST( ds.size() == 7 );
68 
69     invocation_count ic;
70     ic.m_value = 0;
71     data::for_each_sample( ds, ic );
72     BOOST_TEST( ic.m_value == 7 );
73 
74     int arr[] = {1,2,3,7,8,9,10};
75     int* exp = arr;
76     int c = 0;
77 
78     data::for_each_sample( ds, [&c,exp](int a) {
79         BOOST_TEST( a == exp[c++] );
80     });
81 }
82 
83 //____________________________________________________________________________//
84 
85 // EOF
86 
87 
88