summaryrefslogtreecommitdiff
path: root/test/std/experimental/string.view/string.view.ops/substr.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/experimental/string.view/string.view.ops/substr.pass.cpp')
-rw-r--r--test/std/experimental/string.view/string.view.ops/substr.pass.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/test/std/experimental/string.view/string.view.ops/substr.pass.cpp b/test/std/experimental/string.view/string.view.ops/substr.pass.cpp
index c80e90a04788..a651010d4b27 100644
--- a/test/std/experimental/string.view/string.view.ops/substr.pass.cpp
+++ b/test/std/experimental/string.view/string.view.ops/substr.pass.cpp
@@ -7,8 +7,6 @@
//
//===----------------------------------------------------------------------===//
-
-// XFAIL: libcpp-no-exceptions
// <string_view>
// constexpr basic_string_view substr(size_type pos = 0, size_type n = npos) const;
@@ -20,30 +18,42 @@
#include <experimental/string_view>
#include <cassert>
+#include "test_macros.h"
+
template<typename CharT>
void test1 ( std::experimental::basic_string_view<CharT> sv, size_t n, size_t pos ) {
- try {
+ if (pos > sv.size()) {
+#ifndef TEST_HAS_NO_EXCEPTIONS
+ try {
+ std::experimental::basic_string_view<CharT> sv1 = sv.substr(pos, n);
+ assert(false);
+ } catch (const std::out_of_range&) {
+ return;
+ } catch (...) {
+ assert(false);
+ }
+#endif
+ } else {
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);
@@ -68,7 +78,7 @@ int main () {
test ( L"a" );
test ( L"" );
-#if __cplusplus >= 201103L
+#if TEST_STD_VER >= 11
test ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
test ( u"ABCDE" );
test ( u"a" );
@@ -79,8 +89,8 @@ int main () {
test ( U"a" );
test ( U"" );
#endif
-
-#if _LIBCPP_STD_VER > 11
+
+#if TEST_STD_VER > 11
{
constexpr std::experimental::string_view sv1 { "ABCDE", 5 };
@@ -91,7 +101,7 @@ int main () {
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, "" );