Skip to content
This repository was archived by the owner on Mar 22, 2023. It is now read-only.

Commit 1235110

Browse files
committed
string_view: add string_view forward iterator API libcxx tests
- taken from: llvm-mirror/libcxx@78d6a77
1 parent d7471a9 commit 1235110

2 files changed

Lines changed: 199 additions & 0 deletions

File tree

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
// <string_view>
10+
11+
// constexpr const_iterator begin() const;
12+
13+
#include <string_view>
14+
#include <cassert>
15+
16+
#include "test_macros.h"
17+
18+
template <class S>
19+
void
20+
test(S s)
21+
{
22+
const S& cs = s;
23+
typename S::iterator b = s.begin();
24+
typename S::const_iterator cb1 = cs.begin();
25+
typename S::const_iterator cb2 = s.cbegin();
26+
if (!s.empty())
27+
{
28+
assert( *b == s[0]);
29+
assert( &*b == &s[0]);
30+
assert( *cb1 == s[0]);
31+
assert(&*cb1 == &s[0]);
32+
assert( *cb2 == s[0]);
33+
assert(&*cb2 == &s[0]);
34+
35+
}
36+
assert( b == cb1);
37+
assert( b == cb2);
38+
assert(cb1 == cb2);
39+
}
40+
41+
42+
int main(int, char**)
43+
{
44+
typedef std::string_view string_view;
45+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
46+
typedef std::u8string_view u8string_view;
47+
#endif
48+
typedef std::u16string_view u16string_view;
49+
typedef std::u32string_view u32string_view;
50+
typedef std::wstring_view wstring_view;
51+
52+
test(string_view ());
53+
test(u16string_view());
54+
test(u32string_view());
55+
test(wstring_view ());
56+
test(string_view ( "123"));
57+
test(wstring_view (L"123"));
58+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
59+
test(u8string_view{u8"123"});
60+
#endif
61+
#if TEST_STD_VER >= 11
62+
test(u16string_view{u"123"});
63+
test(u32string_view{U"123"});
64+
#endif
65+
66+
#if TEST_STD_VER > 11
67+
{
68+
constexpr string_view sv { "123", 3 };
69+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
70+
constexpr u8string_view u8sv {u8"123", 3 };
71+
#endif
72+
constexpr u16string_view u16sv {u"123", 3 };
73+
constexpr u32string_view u32sv {U"123", 3 };
74+
constexpr wstring_view wsv {L"123", 3 };
75+
76+
static_assert ( *sv.begin() == sv[0], "" );
77+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
78+
static_assert ( *u8sv.begin() == u8sv[0], "" );
79+
#endif
80+
static_assert ( *u16sv.begin() == u16sv[0], "" );
81+
static_assert ( *u32sv.begin() == u32sv[0], "" );
82+
static_assert ( *wsv.begin() == wsv[0], "" );
83+
84+
static_assert ( *sv.cbegin() == sv[0], "" );
85+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
86+
static_assert ( *u8sv.cbegin() == u8sv[0], "" );
87+
#endif
88+
static_assert ( *u16sv.cbegin() == u16sv[0], "" );
89+
static_assert ( *u32sv.cbegin() == u32sv[0], "" );
90+
static_assert ( *wsv.cbegin() == wsv[0], "" );
91+
}
92+
#endif
93+
94+
return 0;
95+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
// <string_view>
10+
11+
// constexpr const_iterator end() const;
12+
13+
#include <string_view>
14+
#include <cassert>
15+
#include <cstddef>
16+
17+
#include "test_macros.h"
18+
19+
template <class S>
20+
void
21+
test(S s)
22+
{
23+
const S& cs = s;
24+
typename S::iterator e = s.end();
25+
typename S::const_iterator ce1 = cs.end();
26+
typename S::const_iterator ce2 = s.cend();
27+
28+
if (s.empty())
29+
{
30+
assert( e == s.begin());
31+
assert(ce1 == cs.begin());
32+
assert(ce2 == s.begin());
33+
}
34+
else
35+
{
36+
assert( e != s.begin());
37+
assert(ce1 != cs.begin());
38+
assert(ce2 != s.begin());
39+
}
40+
41+
assert(static_cast<std::size_t>( e - s.begin()) == s.size());
42+
assert(static_cast<std::size_t>(ce1 - cs.begin()) == cs.size());
43+
assert(static_cast<std::size_t>(ce2 - s.cbegin()) == s.size());
44+
45+
assert( e == ce1);
46+
assert( e == ce2);
47+
assert(ce1 == ce2);
48+
}
49+
50+
51+
int main(int, char**)
52+
{
53+
typedef std::string_view string_view;
54+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
55+
typedef std::u8string_view u8string_view;
56+
#endif
57+
typedef std::u16string_view u16string_view;
58+
typedef std::u32string_view u32string_view;
59+
typedef std::wstring_view wstring_view;
60+
61+
test(string_view ());
62+
test(u16string_view());
63+
test(u32string_view());
64+
test(wstring_view ());
65+
test(string_view ( "123"));
66+
test(wstring_view (L"123"));
67+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
68+
test(u8string_view{u8"123"});
69+
#endif
70+
#if TEST_STD_VER >= 11
71+
test(u16string_view{u"123"});
72+
test(u32string_view{U"123"});
73+
#endif
74+
75+
#if TEST_STD_VER > 11
76+
{
77+
constexpr string_view sv { "123", 3 };
78+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
79+
constexpr u8string_view u8sv {u8"123", 3 };
80+
#endif
81+
constexpr u16string_view u16sv {u"123", 3 };
82+
constexpr u32string_view u32sv {U"123", 3 };
83+
constexpr wstring_view wsv {L"123", 3 };
84+
85+
static_assert ( sv.begin() != sv.end(), "" );
86+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
87+
static_assert ( u8sv.begin() != u8sv.end(), "" );
88+
#endif
89+
static_assert ( u16sv.begin() != u16sv.end(), "" );
90+
static_assert ( u32sv.begin() != u32sv.end(), "" );
91+
static_assert ( wsv.begin() != wsv.end(), "" );
92+
93+
static_assert ( sv.begin() != sv.cend(), "" );
94+
#if defined(__cpp_lib_char8_t) && __cpp_lib_char8_t >= 201811L
95+
static_assert ( u8sv.begin() != u8sv.cend(), "" );
96+
#endif
97+
static_assert ( u16sv.begin() != u16sv.cend(), "" );
98+
static_assert ( u32sv.begin() != u32sv.cend(), "" );
99+
static_assert ( wsv.begin() != wsv.cend(), "" );
100+
}
101+
#endif
102+
103+
return 0;
104+
}

0 commit comments

Comments
 (0)