mirror of
https://github.com/boostorg/algorithm.git
synced 2025-07-30 20:47:15 +02:00
Add tests with lvalue inputs
If the compiler supports forwarding references, we now test if lvalues can be used as input strings for split(), find_all(), and ifind_all(). Note that MSVC (without its recent /permissive- flag) may pass these tests without the forwarding references changes that I made, due to its non-standard binding of lvalues to rvalues.
This commit is contained in:
@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
// See http://www.boost.org for updates, documentation, and revision history.
|
// See http://www.boost.org for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/split.hpp>
|
#include <boost/algorithm/string/split.hpp>
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
// equals predicate is used for result comparison
|
// equals predicate is used for result comparison
|
||||||
@ -82,6 +84,28 @@ void iterator_test()
|
|||||||
string("xx") );
|
string("xx") );
|
||||||
deep_compare( tokens, vtokens );
|
deep_compare( tokens, vtokens );
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
// If using a compiler that supports forwarding references, we should be able to use lvalues, too
|
||||||
|
find_all(
|
||||||
|
tokens,
|
||||||
|
string("xx-abc--xx-abb"),
|
||||||
|
"xx" );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==2 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("xx") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("xx") );
|
||||||
|
|
||||||
|
ifind_all(
|
||||||
|
tokens,
|
||||||
|
string("Xx-abc--xX-abb-xx"),
|
||||||
|
"xx" );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==3 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("Xx") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("xX") );
|
||||||
|
BOOST_CHECK( tokens[2]==string("xx") );
|
||||||
|
#endif
|
||||||
|
|
||||||
// split tests
|
// split tests
|
||||||
split(
|
split(
|
||||||
tokens,
|
tokens,
|
||||||
@ -144,6 +168,21 @@ void iterator_test()
|
|||||||
BOOST_REQUIRE( tokens.size()==1 );
|
BOOST_REQUIRE( tokens.size()==1 );
|
||||||
BOOST_CHECK( tokens[0]==string("") );
|
BOOST_CHECK( tokens[0]==string("") );
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
// If using a compiler that supports forwarding references, we should be able to use lvalues, too
|
||||||
|
split(
|
||||||
|
tokens,
|
||||||
|
string("Xx-abc--xX-abb-xx"),
|
||||||
|
is_any_of("xX"),
|
||||||
|
token_compress_on );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==4 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("-abc--") );
|
||||||
|
BOOST_CHECK( tokens[2]==string("-abb-") );
|
||||||
|
BOOST_CHECK( tokens[3]==string("") );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx"));
|
find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx"));
|
||||||
find_iterator<string::iterator> fiter2;
|
find_iterator<string::iterator> fiter2;
|
||||||
|
Reference in New Issue
Block a user