diff --git a/test/algorithm_test/copy_backward.cpp b/test/algorithm_test/copy_backward.cpp index 3fd5679..4879c28 100644 --- a/test/algorithm_test/copy_backward.cpp +++ b/test/algorithm_test/copy_backward.cpp @@ -8,6 +8,10 @@ // // For more information, see http://www.boost.org/libs/range/ // +// Credits: +// awulkiew highlighted that this test was not successfully testing the +// algorithm. +// #include #include @@ -17,52 +21,64 @@ #include #include #include -#include #include -namespace boost +namespace boost_range_test { namespace { - template< class Container > - void test_copy_backward_impl() - { - Container source; - typedef BOOST_DEDUCED_TYPENAME Container::value_type value_t; +template +void test_copy_backward_impl(std::size_t n) +{ + Container source; + typedef typename Container::value_type value_t; + for (std::size_t i = 0; i < n; ++i) + source.push_back(static_cast(i)); - std::vector target; - target.resize(source.size()); + std::vector target(n); - typedef BOOST_DEDUCED_TYPENAME range_iterator< std::vector >::type iterator_t; - iterator_t it = boost::copy_backward(source, target.begin()); + typedef typename boost::range_iterator< + std::vector + >::type iterator_t; - BOOST_CHECK( it == target.end() ); - BOOST_CHECK_EQUAL_COLLECTIONS( target.begin(), target.end(), - source.rbegin(), source.rend() ); - - BOOST_CHECK( it == boost::copy_backward(boost::make_iterator_range(source), target.begin()) ); - BOOST_CHECK_EQUAL_COLLECTIONS( target.begin(), target.end(), - source.rbegin(), source.rend() ); - } + iterator_t it = boost::copy_backward(source, target.end()); - void test_copy_backward() - { - test_copy_backward_impl< std::vector >(); - test_copy_backward_impl< std::list >(); - test_copy_backward_impl< std::set >(); - test_copy_backward_impl< std::multiset >(); - } - } + BOOST_CHECK(it == target.begin()); + + BOOST_CHECK_EQUAL_COLLECTIONS(target.begin(), target.end(), + source.begin(), source.end()); + + BOOST_CHECK(it == boost::copy_backward( + boost::make_iterator_range(source), target.end())); + + BOOST_CHECK_EQUAL_COLLECTIONS(target.begin(), target.end(), + source.begin(), source.end()); } +template +void test_copy_backward_impl() +{ + test_copy_backward_impl(0u); + test_copy_backward_impl(1u); + test_copy_backward_impl(100u); +} + +void test_copy_backward() +{ + test_copy_backward_impl >(); + test_copy_backward_impl >(); +} + } // anonymous namespace +} // namespace boost_range_test + boost::unit_test::test_suite* -init_unit_test_suite(int argc, char* argv[]) +init_unit_test_suite(int, char*[]) { boost::unit_test::test_suite* test - = BOOST_TEST_SUITE( "RangeTestSuite.algorithm.copy_backward" ); + = BOOST_TEST_SUITE("RangeTestSuite.algorithm.copy_backward"); - test->add( BOOST_TEST_CASE( &boost::test_copy_backward ) ); + test->add(BOOST_TEST_CASE(&boost_range_test::test_copy_backward)); return test; }