3 // Copyright Neil Groves 2010. 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)
8 // For more information, see http://www.boost.org/libs/range/
11 #include <boost/detail/workaround.hpp>
13 #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
14 # pragma warn -8091 // suppress warning in Boost.Test
15 # pragma warn -8057 // unused argument argc/argv in Boost.Test
18 #include <boost/range/begin.hpp>
19 #include <boost/test/unit_test.hpp>
20 #include <boost/test/test_tools.hpp>
21 #include <boost/test/included/unit_test.hpp>
25 template<class SinglePassRange
>
26 inline BOOST_DEDUCED_TYPENAME
boost::range_iterator
<SinglePassRange
>::type
27 begin(SinglePassRange
& rng
)
32 template<class SinglePassRange
>
33 inline BOOST_DEDUCED_TYPENAME
boost::range_iterator
<const SinglePassRange
>::type
34 begin(const SinglePassRange
& rng
)
39 template<class SinglePassRange
>
40 void mock_algorithm_using_begin(const SinglePassRange
& rng
)
42 BOOST_CHECK( begin(rng
) == rng
.begin() );
45 template<class SinglePassRange
>
46 void mock_algorithm_using_begin(SinglePassRange
& rng
)
48 BOOST_CHECK( begin(rng
) == rng
.begin() );
54 #ifdef BOOST_RANGE_SIMULATE_BEGIN_WITHOUT_ADL_NAMESPACE_BARRIER
55 template<class SinglePassRange
>
56 inline BOOST_DEDUCED_TYPENAME range_iterator
<SinglePassRange
>::type
57 begin(SinglePassRange
& rng
)
62 template<class SinglePassRange
>
63 inline BOOST_DEDUCED_TYPENAME range_iterator
<const SinglePassRange
>::type
64 begin(const SinglePassRange
& rng
)
70 class MockTestBeginCollection
73 typedef char value_type
;
74 typedef const char* const_pointer
;
75 typedef char* pointer
;
76 typedef const_pointer const_iterator
;
77 typedef pointer iterator
;
79 MockTestBeginCollection()
85 const_iterator
begin() const { return m_first
; }
86 iterator
begin() { return m_first
; }
87 const_iterator
end() const { return m_last
; }
88 iterator
end() { return m_last
; }
98 void test_range_begin()
100 boost::MockTestBeginCollection c
;
101 const boost::MockTestBeginCollection
& const_c
= c
;
102 mock_std::mock_algorithm_using_begin(const_c
);
103 mock_std::mock_algorithm_using_begin(c
);
107 using boost::unit_test::test_suite
;
109 boost::unit_test::test_suite
*
110 init_unit_test_suite( int argc
, char* argv
[] )
112 boost::unit_test::test_suite
* test
= BOOST_TEST_SUITE( "Range Test Suite - begin() ADL namespace barrier" );
114 test
->add( BOOST_TEST_CASE( &test_range_begin
) );