summaryrefslogtreecommitdiff
path: root/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-02 19:18:58 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-02 19:18:58 +0000
commit53a420fba21cf1644972b34dcd811a43cdb8368d (patch)
tree66a19f6f8b65215772549a51d688492ab8addc0d /test/std/strings/string.view/string.view.iterators/begin.pass.cpp
parentb50f1549701eb950921e5d6f2e55ba1a1dadbb43 (diff)
Notes
Diffstat (limited to 'test/std/strings/string.view/string.view.iterators/begin.pass.cpp')
-rw-r--r--test/std/strings/string.view/string.view.iterators/begin.pass.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/test/std/strings/string.view/string.view.iterators/begin.pass.cpp b/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
new file mode 100644
index 000000000000..b766c51682fa
--- /dev/null
+++ b/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
@@ -0,0 +1,79 @@
+//===----------------------------------------------------------------------===//
+//
+// 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 const_iterator begin() const;
+
+#include <string_view>
+#include <cassert>
+
+#include "test_macros.h"
+
+template <class S>
+void
+test(S s)
+{
+ const S& cs = s;
+ typename S::iterator b = s.begin();
+ typename S::const_iterator cb1 = cs.begin();
+ typename S::const_iterator cb2 = s.cbegin();
+ if (!s.empty())
+ {
+ assert( *b == s[0]);
+ assert( &*b == &s[0]);
+ assert( *cb1 == s[0]);
+ assert(&*cb1 == &s[0]);
+ assert( *cb2 == s[0]);
+ assert(&*cb2 == &s[0]);
+
+ }
+ assert( b == cb1);
+ assert( b == cb2);
+ assert(cb1 == cb2);
+}
+
+
+int main()
+{
+ typedef std::string_view string_view;
+ typedef std::u16string_view u16string_view;
+ typedef std::u32string_view u32string_view;
+ typedef std::wstring_view wstring_view;
+
+ test(string_view ());
+ test(u16string_view());
+ test(u32string_view());
+ test(wstring_view ());
+ test(string_view ( "123"));
+ test(wstring_view (L"123"));
+#if TEST_STD_VER >= 11
+ test(u16string_view{u"123"});
+ test(u32string_view{U"123"});
+#endif
+
+#if TEST_STD_VER > 11
+ {
+ constexpr string_view sv { "123", 3 };
+ constexpr u16string_view u16sv {u"123", 3 };
+ constexpr u32string_view u32sv {U"123", 3 };
+ constexpr wstring_view wsv {L"123", 3 };
+
+ static_assert ( *sv.begin() == sv[0], "" );
+ static_assert ( *u16sv.begin() == u16sv[0], "" );
+ static_assert ( *u32sv.begin() == u32sv[0], "" );
+ static_assert ( *wsv.begin() == wsv[0], "" );
+
+ static_assert ( *sv.cbegin() == sv[0], "" );
+ static_assert ( *u16sv.cbegin() == u16sv[0], "" );
+ static_assert ( *u32sv.cbegin() == u32sv[0], "" );
+ static_assert ( *wsv.cbegin() == wsv[0], "" );
+ }
+#endif
+}