forked from boostorg/core
Add sv_construct_test
This commit is contained in:
@ -13,7 +13,10 @@
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/core/is_same.hpp>
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/assert/source_location.hpp>
|
||||
#include <boost/throw_exception.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <string>
|
||||
@ -75,7 +78,8 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR basic_string_view( Ch const* begin, Ch const* end ) BOOST_NOEXCEPT: p_( begin ), n_( end - begin )
|
||||
template<class End> BOOST_CXX14_CONSTEXPR basic_string_view( Ch const* begin, End end,
|
||||
typename boost::enable_if<is_same<End, Ch const*> >::type* = 0 ) BOOST_NOEXCEPT: p_( begin ), n_( end - begin )
|
||||
{
|
||||
BOOST_ASSERT( end - begin >= 0 );
|
||||
}
|
||||
@ -160,13 +164,13 @@ public:
|
||||
|
||||
// element access
|
||||
|
||||
BOOST_CONSTEXPR const_reference operator[]( size_type pos ) const BOOST_NOEXCEPT
|
||||
BOOST_CXX14_CONSTEXPR const_reference operator[]( size_type pos ) const BOOST_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT( pos < size() );
|
||||
return p_[ pos ];
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR const_reference at( size_type pos ) const
|
||||
BOOST_CXX14_CONSTEXPR const_reference at( size_type pos ) const
|
||||
{
|
||||
if( pos >= size() )
|
||||
{
|
||||
@ -176,13 +180,13 @@ public:
|
||||
return p_[ pos ];
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR const_reference front() const BOOST_NOEXCEPT
|
||||
BOOST_CXX14_CONSTEXPR const_reference front() const BOOST_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT( !empty() );
|
||||
return p_[ 0 ];
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR const_reference back() const BOOST_NOEXCEPT
|
||||
BOOST_CXX14_CONSTEXPR const_reference back() const BOOST_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT( !empty() );
|
||||
return p_[ n_ - 1 ];
|
||||
@ -516,7 +520,7 @@ public:
|
||||
}
|
||||
|
||||
return npos;
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR size_type find_last_not_of( Ch c, size_type pos = npos ) const BOOST_NOEXCEPT
|
||||
{
|
||||
|
@ -248,6 +248,7 @@ run bit_endian_test.cpp ;
|
||||
run type_name_test.cpp ;
|
||||
|
||||
run sv_types_test.cpp ;
|
||||
run sv_construct_test.cpp ;
|
||||
|
||||
use-project /boost/core/swap : ./swap ;
|
||||
build-project ./swap ;
|
||||
|
305
test/sv_construct_test.cpp
Normal file
305
test/sv_construct_test.cpp
Normal file
@ -0,0 +1,305 @@
|
||||
// Copyright 2021 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/core/string_view.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <iterator>
|
||||
#include <string>
|
||||
#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW)
|
||||
# include <string_view>
|
||||
#endif
|
||||
|
||||
template<class It> std::reverse_iterator<It> make_reverse_iterator( It it )
|
||||
{
|
||||
return std::reverse_iterator<It>( it );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
boost::core::string_view sv;
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), static_cast<char const*>(0) );
|
||||
BOOST_TEST_EQ( sv.size(), 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "";
|
||||
|
||||
boost::core::string_view sv( s );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "123";
|
||||
|
||||
boost::core::string_view sv( s );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 3 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "123";
|
||||
|
||||
boost::core::string_view sv( s, 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "123";
|
||||
|
||||
boost::core::string_view sv( s, 2 );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 2 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "123";
|
||||
|
||||
boost::core::string_view sv( s, s );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "123";
|
||||
|
||||
boost::core::string_view sv( s, s + 2 );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), s );
|
||||
BOOST_TEST_EQ( sv.size(), 2 );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::string str = "123";
|
||||
|
||||
boost::core::string_view sv( str );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), str.data() );
|
||||
BOOST_TEST_EQ( sv.size(), str.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW)
|
||||
|
||||
{
|
||||
std::string_view str = "123";
|
||||
|
||||
boost::core::string_view sv( str );
|
||||
|
||||
BOOST_TEST_EQ( sv.data(), str.data() );
|
||||
BOOST_TEST_EQ( sv.size(), str.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.begin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.end(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST_EQ( sv.cbegin(), sv.data() );
|
||||
BOOST_TEST_EQ( sv.cend(), sv.data() + sv.size() );
|
||||
|
||||
BOOST_TEST( sv.rbegin() == ::make_reverse_iterator( sv.begin() ) );
|
||||
BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.end() ) );
|
||||
|
||||
BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) );
|
||||
BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) );
|
||||
|
||||
BOOST_TEST_EQ( sv.length(), sv.size() );
|
||||
BOOST_TEST_EQ( sv.empty(), sv.size() == 0 );
|
||||
|
||||
BOOST_TEST_EQ( sv.max_size(), boost::core::string_view::npos );
|
||||
|
||||
if( !sv.empty() )
|
||||
{
|
||||
BOOST_TEST_EQ( &sv.front(), sv.data() );
|
||||
BOOST_TEST_EQ( &sv.back(), sv.data() + sv.size() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
Reference in New Issue
Block a user