diff --git a/include/boost/core/string_view.hpp b/include/boost/core/string_view.hpp index e9f9059..818c90d 100644 --- a/include/boost/core/string_view.hpp +++ b/include/boost/core/string_view.hpp @@ -122,22 +122,22 @@ public: BOOST_CONSTEXPR const_reverse_iterator rbegin() const BOOST_NOEXCEPT { - return const_reverse_iterator( begin() ); + return const_reverse_iterator( end() ); } BOOST_CONSTEXPR const_reverse_iterator rend() const BOOST_NOEXCEPT { - return const_reverse_iterator( end() ); + return const_reverse_iterator( begin() ); } BOOST_CONSTEXPR const_reverse_iterator crbegin() const BOOST_NOEXCEPT { - return const_reverse_iterator( begin() ); + return const_reverse_iterator( end() ); } BOOST_CONSTEXPR const_reverse_iterator crend() const BOOST_NOEXCEPT { - return const_reverse_iterator( end() ); + return const_reverse_iterator( begin() ); } // capacity diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 89d40ac..3a8f892 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -249,6 +249,7 @@ run type_name_test.cpp ; run sv_types_test.cpp ; run sv_construct_test.cpp ; +run sv_iteration_test.cpp ; run sv_element_access_test.cpp ; run sv_modifiers_test.cpp ; run sv_copy_test.cpp ; diff --git a/test/sv_construct_test.cpp b/test/sv_construct_test.cpp index af38943..3e7343d 100644 --- a/test/sv_construct_test.cpp +++ b/test/sv_construct_test.cpp @@ -29,11 +29,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -55,11 +55,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -87,11 +87,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -119,11 +119,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -151,11 +151,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -183,11 +183,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -215,11 +215,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -247,11 +247,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); @@ -281,11 +281,11 @@ int main() 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.rbegin() == ::make_reverse_iterator( sv.end() ) ); + BOOST_TEST( sv.rend() == ::make_reverse_iterator( sv.begin() ) ); - BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cbegin() ) ); - BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crbegin() == ::make_reverse_iterator( sv.cend() ) ); + BOOST_TEST( sv.crend() == ::make_reverse_iterator( sv.cbegin() ) ); BOOST_TEST_EQ( sv.length(), sv.size() ); BOOST_TEST_EQ( sv.empty(), sv.size() == 0 ); diff --git a/test/sv_iteration_test.cpp b/test/sv_iteration_test.cpp new file mode 100644 index 0000000..7e85dc0 --- /dev/null +++ b/test/sv_iteration_test.cpp @@ -0,0 +1,61 @@ +// Copyright 2021 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include + +int main() +{ + { + boost::core::string_view sv; + + { + std::string s( sv.begin(), sv.end() ); + BOOST_TEST_EQ( s, std::string( "" ) ); + } + + { + std::string s( sv.cbegin(), sv.cend() ); + BOOST_TEST_EQ( s, std::string( "" ) ); + } + + { + std::string s( sv.rbegin(), sv.rend() ); + BOOST_TEST_EQ( s, std::string( "" ) ); + } + + { + std::string s( sv.crbegin(), sv.crend() ); + BOOST_TEST_EQ( s, std::string( "" ) ); + } + } + + { + boost::core::string_view sv( "123" ); + + { + std::string s( sv.begin(), sv.end() ); + BOOST_TEST_EQ( s, std::string( "123" ) ); + } + + { + std::string s( sv.cbegin(), sv.cend() ); + BOOST_TEST_EQ( s, std::string( "123" ) ); + } + + { + std::string s( sv.rbegin(), sv.rend() ); + BOOST_TEST_EQ( s, std::string( "321" ) ); + } + + { + std::string s( sv.crbegin(), sv.crend() ); + BOOST_TEST_EQ( s, std::string( "321" ) ); + } + } + + return boost::report_errors(); +}