forked from boostorg/utility
Update existing and add missing find() signatures. Add test cases. Update Jamfile. Comment out test2 problem.
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright (c) Marshall Clow 2012-2015.
|
||||
<20> Copyright (c) Marshall Clow 2012-2015.
|
||||
<20> Copyright Beman Dawes 2015
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -197,22 +198,30 @@ namespace boost {
|
||||
return len_ >= x.len_ && traits::compare ( ptr_, x.ptr_, x.len_ ) == 0;
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR bool ends_with(charT c) const { return !empty() && traits::eq ( c, back()); } // Boost extension
|
||||
|
||||
BOOST_CONSTEXPR bool ends_with(charT c) const {
|
||||
return !empty() && traits::eq ( c, back()); // Boost extension
|
||||
}
|
||||
BOOST_CONSTEXPR bool ends_with(basic_string_view x) const { // Boost extension
|
||||
return len_ >= x.len_ && traits::compare ( ptr_ + len_ - x.len_, x.ptr_, x.len_ ) == 0;
|
||||
return len_ >= x.len_ && traits::compare ( ptr_ + len_ - x.len_,
|
||||
x.ptr_, x.len_ ) == 0;
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR size_type find(basic_string_view s) const {
|
||||
const_iterator iter = std::search ( this->cbegin (), this->cend (),
|
||||
s.cbegin (), s.cend (), traits::eq );
|
||||
BOOST_CONSTEXPR size_type find(basic_string_view s,
|
||||
size_type pos = 0) const BOOST_NOEXCEPT {
|
||||
if (pos >= size())
|
||||
return npos;
|
||||
const_iterator iter = std::search(this->cbegin() + pos, this->cend(),
|
||||
s.cbegin (), s.cend (), traits::eq );
|
||||
return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR size_type find(charT c) const BOOST_NOEXCEPT {
|
||||
const_iterator iter = std::find_if ( this->cbegin (), this->cend (),
|
||||
detail::string_view_traits_eq<charT, traits> ( c ));
|
||||
return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter );
|
||||
BOOST_CONSTEXPR size_type find(charT c, size_type pos = 0) const BOOST_NOEXCEPT {
|
||||
return find(basic_string_view(&c, 1), pos);
|
||||
}
|
||||
BOOST_CONSTEXPR size_type find(const charT* s, size_type pos, size_type n) const {
|
||||
return find(basic_string_view(s, n), pos);
|
||||
}
|
||||
BOOST_CONSTEXPR size_type find(const charT* s, size_type pos = 0) const {
|
||||
return find(basic_string_view(s), pos);
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR size_type rfind(basic_string_view s) const BOOST_NOEXCEPT {
|
||||
@ -227,7 +236,6 @@ namespace boost {
|
||||
return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter );
|
||||
}
|
||||
|
||||
|
||||
BOOST_CONSTEXPR size_type find_first_of(basic_string_view s) const BOOST_NOEXCEPT {
|
||||
const_iterator iter = std::find_first_of
|
||||
( this->cbegin (), this->cend (), s.cbegin (), s.cend (), traits::eq );
|
||||
|
@ -30,6 +30,10 @@ test-suite utility
|
||||
[ run string_ref_test1.cpp unit_test_framework ]
|
||||
[ run string_ref_test2.cpp unit_test_framework ]
|
||||
[ run string_ref_test_io.cpp unit_test_framework ]
|
||||
[ run string_view_test1.cpp unit_test_framework ]
|
||||
[ run string_view_test2.cpp unit_test_framework ]
|
||||
[ run string_view_test3.cpp ]
|
||||
[ run string_view_test_io.cpp unit_test_framework ]
|
||||
[ run ../value_init_test.cpp ]
|
||||
[ run ../value_init_workaround_test.cpp ]
|
||||
[ run ../initialized_test.cpp ]
|
||||
|
@ -253,10 +253,10 @@ void to_string ( const char *arg ) {
|
||||
str2 = sr1.to_string ();
|
||||
BOOST_CHECK ( str1 == str2 );
|
||||
|
||||
#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
||||
std::string str3 = static_cast<std::string> ( sr1 );
|
||||
BOOST_CHECK ( str1 == str3 );
|
||||
#endif
|
||||
//#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
||||
// std::string str3 = static_cast<std::string> ( sr1 );
|
||||
// BOOST_CHECK ( str1 == str3 );
|
||||
//#endif
|
||||
}
|
||||
|
||||
void compare ( const char *arg ) {
|
||||
|
@ -1,10 +1,10 @@
|
||||
/*
|
||||
Copyright (c) Beman Dawes 2015
|
||||
<20> Copyright Beman Dawes 2015
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0
|
||||
See http://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
For more information, see http://www.boost.org
|
||||
For more information, see http://www.boost.org
|
||||
*/
|
||||
|
||||
#include <boost/utility/string_view.hpp>
|
||||
@ -15,13 +15,65 @@
|
||||
|
||||
#define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cout
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_main.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
void find_test()
|
||||
{
|
||||
// find, two modified and two new signatures
|
||||
std::string s1("ababcab");
|
||||
boost::string_view sv1(s1);
|
||||
std::string s2("abc");
|
||||
boost::string_view sv2(s2);
|
||||
|
||||
BOOST_TEST_EQ(sv1.find(sv2), 2);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 0), 2);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 1), 2);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 2), 2);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 3), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 4), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 5), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 6), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 7), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find(sv2, 8), boost::string_view::npos);
|
||||
|
||||
BOOST_TEST_EQ(sv1.find('b'), 1);
|
||||
BOOST_TEST_EQ(sv1.find('b', 0), 1);
|
||||
BOOST_TEST_EQ(sv1.find('b', 1), 1);
|
||||
BOOST_TEST_EQ(sv1.find('b', 2), 3);
|
||||
BOOST_TEST_EQ(sv1.find('b', 3), 3);
|
||||
BOOST_TEST_EQ(sv1.find('b', 4), 6);
|
||||
BOOST_TEST_EQ(sv1.find('b', 5), 6);
|
||||
BOOST_TEST_EQ(sv1.find('b', 6), 6);
|
||||
BOOST_TEST_EQ(sv1.find('b', 7), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find('b', 8), boost::string_view::npos);
|
||||
|
||||
BOOST_TEST_EQ(sv1.find("abc", 0, 2), 0);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 1, 2), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 2, 2), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 3, 2), 5);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 4, 2), 5);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 5, 2), 5);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 6, 2), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 7, 2), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 8, 2), boost::string_view::npos);
|
||||
|
||||
BOOST_TEST_EQ(sv1.find("abc"), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 0), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 1), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 2), 2);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 3), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 4), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 5), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 6), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 7), boost::string_view::npos);
|
||||
BOOST_TEST_EQ(sv1.find("abc", 8), boost::string_view::npos);
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
|
||||
int main()
|
||||
int cpp_main(int argc, char* argv[])
|
||||
{
|
||||
typedef boost::string_view::traits_type string_traits;
|
||||
typedef boost::string_view::const_pointer const_pointer;
|
||||
@ -29,6 +81,8 @@ int main()
|
||||
// swap
|
||||
// copy
|
||||
// compare, five new signatures
|
||||
|
||||
find_test();
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
Reference in New Issue
Block a user