Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/range/test/reversible_range.cpp @ 33

Last change on this file since 33 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 3.7 KB
Line 
1// Boost.Range library
2//
3//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
4//  distribution is subject to the Boost Software License, Version
5//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
6//  http://www.boost.org/LICENSE_1_0.txt)
7//
8// For more information, see http://www.boost.org/libs/range/
9//
10
11
12#include <boost/detail/workaround.hpp>
13
14#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
15#  pragma warn -8091 // supress warning in Boost.Test
16#  pragma warn -8057 // unused argument argc/argv in Boost.Test
17#endif
18
19#include <boost/range/rbegin.hpp>
20#include <boost/range/rend.hpp>
21#include <boost/range/begin.hpp>
22#include <boost/range/end.hpp>
23#include <boost/static_assert.hpp>
24#include <boost/type_traits.hpp>
25#include <boost/test/test_tools.hpp>
26#include <vector>
27#include <algorithm>
28
29using namespace boost;
30using namespace std;
31
32void check_iterator()
33{
34    typedef vector<char>                          vec_t;
35    typedef vec_t::iterator                       iterator;
36    typedef pair<iterator,iterator>               pair_t;
37    typedef range_reverse_iterator<pair_t>::type  rev_iterator;
38    typedef pair<rev_iterator,rev_iterator>       rev_pair_t;
39   
40    vec_t                            vec;
41    pair_t                           p    = make_pair( vec.begin(), vec.end() );
42    rev_pair_t                       rp   = make_pair( rbegin( p ), rend( p ) );
43    char*                            str  = "mutable";
44    const char*                      cstr = "not mutable";
45    char                             a[]  = "mutable";
46    const char                       ca[] = "not mutable";                       
47    wchar_t*                         wstr = L"mutable";
48    const wchar_t*                   cwstr= L"not mutable";
49    wchar_t                          wa[] = L"mutable";
50    const wchar_t                    cwa[]= L"not mutable";
51         
52    BOOST_CHECK( rbegin( vec ) == range_reverse_iterator<vec_t>::type( vec.end() ) );
53    BOOST_CHECK( rend( vec ) == range_reverse_iterator<vec_t>::type( vec.begin() ) );
54    BOOST_CHECK( std::distance( rbegin( vec ), rend( vec ) ) == std::distance( begin( vec ), end( vec ) ) );
55
56    BOOST_CHECK( rbegin( p ) == begin( rp ) );
57    BOOST_CHECK( rend( p ) == end( rp ) );
58    BOOST_CHECK( std::distance( rbegin( p ), rend( p ) ) == std::distance( begin( rp ), end( rp ) ) );
59    BOOST_CHECK( std::distance( begin( p ), end( p ) ) == std::distance( rbegin( rp ), rend( rp ) ) );
60
61    BOOST_CHECK_EQUAL( &*begin( str ), &*( rend( str ) - 1 ) );
62    BOOST_CHECK_EQUAL( &*( end( str ) - 1 ), &*rbegin( str ) );
63    BOOST_CHECK_EQUAL( &*begin( cstr ), &*( rend( cstr ) - 1 ) );
64    BOOST_CHECK_EQUAL( &*( end( cstr ) - 1 ), &*rbegin( cstr ) );
65
66    BOOST_CHECK_EQUAL( &*begin( a ), &*( rend( a ) - 1 ) );
67    BOOST_CHECK_EQUAL( &*( end( a ) - 1 ), &*rbegin( a ) );
68    BOOST_CHECK_EQUAL( &*begin( ca ), &*( rend( ca ) - 1 ) );
69    BOOST_CHECK_EQUAL( &*( end( ca ) - 1 ), &*rbegin( ca ) );
70
71    BOOST_CHECK_EQUAL( &*begin( wstr ), &*( rend( wstr ) - 1 ) );
72    BOOST_CHECK_EQUAL( &*( end( wstr ) - 1 ), &*rbegin( wstr ) );
73    BOOST_CHECK_EQUAL( &*begin( cwstr ), &*( rend( cwstr ) - 1 ) );
74    BOOST_CHECK_EQUAL( &*( end( cwstr ) - 1 ), &*rbegin( cwstr ) );
75   
76    BOOST_CHECK_EQUAL( &*begin( wa ), &*( rend( wa ) - 1 ) );
77    BOOST_CHECK_EQUAL( &*( end( wa ) - 1 ), &*rbegin( wa ) );
78    BOOST_CHECK_EQUAL( &*begin( cwa ), &*( rend( cwa ) - 1 ) );
79    BOOST_CHECK_EQUAL( &*( end( cwa ) - 1 ), &*rbegin( cwa ) );
80
81}
82
83
84#include <boost/test/unit_test.hpp>
85using boost::unit_test::test_suite;
86
87
88test_suite* init_unit_test_suite( int argc, char* argv[] )
89{
90    test_suite* test = BOOST_TEST_SUITE( "Range Test Suite" );
91
92    test->add( BOOST_TEST_CASE( &check_iterator ) );
93
94    return test;
95}
96
97
98
99
100
101
102
Note: See TracBrowser for help on using the repository browser.