[boost][range] - Improved handling of temporary ranges in range algorithms.

[SVN r63903]
This commit is contained in:
Neil Groves
2010-07-12 00:12:49 +00:00
parent ef000176d8
commit 74a01a4487
57 changed files with 1178 additions and 216 deletions

View File

@ -51,6 +51,46 @@ namespace boost
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(boost::make_iterator_range(cont1),
cont2, test_target.begin());
BOOST_CHECK_EQUAL(
std::distance<iterator_t>(reference_target.begin(), reference_it),
std::distance<iterator_t>(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(cont1, boost::make_iterator_range(cont2),
test_target.begin());
BOOST_CHECK_EQUAL(
std::distance<iterator_t>(reference_target.begin(), reference_it),
std::distance<iterator_t>(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(boost::make_iterator_range(cont1),
boost::make_iterator_range(cont2),
test_target.begin());
BOOST_CHECK_EQUAL(
std::distance<iterator_t>(reference_target.begin(), reference_it),
std::distance<iterator_t>(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
}
template<class Container, class BinaryPredicate>
@ -95,6 +135,46 @@ namespace boost
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(boost::make_iterator_range(cont1), cont2,
test_target.begin(), pred);
BOOST_CHECK_EQUAL(
std::distance(reference_target.begin(), reference_it),
std::distance(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(cont1, boost::make_iterator_range(cont2),
test_target.begin(), pred);
BOOST_CHECK_EQUAL(
std::distance(reference_target.begin(), reference_it),
std::distance(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
test_it = boost::merge(boost::make_iterator_range(cont1),
boost::make_iterator_range(cont2),
test_target.begin(), pred);
BOOST_CHECK_EQUAL(
std::distance(reference_target.begin(), reference_it),
std::distance(test_target.begin(), test_it)
);
BOOST_CHECK_EQUAL_COLLECTIONS(
reference_target.begin(), reference_target.end(),
test_target.begin(), test_target.end()
);
}
template<class Container1, class Container2>