diff options
author | Eric Fiselier <eric@efcs.ca> | 2014-12-20 01:40:03 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2014-12-20 01:40:03 +0000 |
commit | 5a83710e371fe68a06e6e3876c6a2c8b820a8976 (patch) | |
tree | afde4c82ad6704681781c5cd49baa3fbd05c85db /libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp | |
parent | f11e8eab527fba316c64112f6e05de1a79693a3e (diff) | |
download | bcm5719-llvm-5a83710e371fe68a06e6e3876c6a2c8b820a8976.tar.gz bcm5719-llvm-5a83710e371fe68a06e6e3876c6a2c8b820a8976.zip |
Move test into test/std subdirectory.
llvm-svn: 224658
Diffstat (limited to 'libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp')
-rw-r--r-- | libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp b/libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp new file mode 100644 index 00000000000..2b134ea2cf0 --- /dev/null +++ b/libcxx/test/std/experimental/string.view/string.view.ops/substr.pass.cpp @@ -0,0 +1,107 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +// <string_view> + +// constexpr basic_string_view substr(size_type pos = 0, size_type n = npos) const; + +// Throws: out_of_range if pos > size(). +// Effects: Determines the effective length rlen of the string to reference as the smaller of n and size() - pos. +// Returns: basic_string_view(data()+pos, rlen). + +#include <experimental/string_view> +#include <cassert> + +template<typename CharT> +void test1 ( std::experimental::basic_string_view<CharT> sv, size_t n, size_t pos ) { + try { + std::experimental::basic_string_view<CharT> sv1 = sv.substr(pos, n); + const size_t rlen = std::min ( n, sv.size() - pos ); + assert ( sv1.size() == rlen ); + for ( size_t i = 0; i <= rlen; ++i ) + assert ( sv[pos+i] == sv1[i] ); + } + catch ( const std::out_of_range & ) { assert ( pos > sv.size()); } +} + + +template<typename CharT> +void test ( const CharT *s ) { + typedef std::experimental::basic_string_view<CharT> string_view_t; + + string_view_t sv1 ( s ); + + test1(sv1, 0, 0); + test1(sv1, 1, 0); + test1(sv1, 20, 0); + test1(sv1, sv1.size(), 0); + + test1(sv1, 0, 3); + test1(sv1, 2, 3); + test1(sv1, 100, 3); + + test1(sv1, 0, string_view_t::npos); + test1(sv1, 2, string_view_t::npos); + test1(sv1, sv1.size(), string_view_t::npos); + + test1(sv1, sv1.size() + 1, 0); + test1(sv1, sv1.size() + 1, 1); + test1(sv1, sv1.size() + 1, string_view_t::npos); +} + +int main () { + test ( "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" ); + test ( "ABCDE"); + test ( "a" ); + test ( "" ); + + test ( L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" ); + test ( L"ABCDE" ); + test ( L"a" ); + test ( L"" ); + +#if __cplusplus >= 201103L + test ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" ); + test ( u"ABCDE" ); + test ( u"a" ); + test ( u"" ); + + test ( U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" ); + test ( U"ABCDE" ); + test ( U"a" ); + test ( U"" ); +#endif + +#if _LIBCPP_STD_VER > 11 + { + constexpr std::experimental::string_view sv1 { "ABCDE", 5 }; + + { + constexpr std::experimental::string_view sv2 = sv1.substr ( 0, 3 ); + static_assert ( sv2.size() == 3, "" ); + static_assert ( sv2[0] == 'A', "" ); + static_assert ( sv2[1] == 'B', "" ); + static_assert ( sv2[2] == 'C', "" ); + } + + { + constexpr std::experimental::string_view sv2 = sv1.substr ( 3, 0 ); + static_assert ( sv2.size() == 0, "" ); + } + + { + constexpr std::experimental::string_view sv2 = sv1.substr ( 3, 3 ); + static_assert ( sv2.size() == 2, "" ); + static_assert ( sv2[0] == 'D', "" ); + static_assert ( sv2[1] == 'E', "" ); + } + } +#endif +}
\ No newline at end of file |