1*0a6a1f1dSLionel Sambuc //===----------------------------------------------------------------------===//
2*0a6a1f1dSLionel Sambuc //
3*0a6a1f1dSLionel Sambuc // The LLVM Compiler Infrastructure
4*0a6a1f1dSLionel Sambuc //
5*0a6a1f1dSLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
6*0a6a1f1dSLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
7*0a6a1f1dSLionel Sambuc //
8*0a6a1f1dSLionel Sambuc //===----------------------------------------------------------------------===//
9*0a6a1f1dSLionel Sambuc
10*0a6a1f1dSLionel Sambuc
11*0a6a1f1dSLionel Sambuc // <string_view>
12*0a6a1f1dSLionel Sambuc
13*0a6a1f1dSLionel Sambuc // size_type copy(charT* s, size_type n, size_type pos = 0) const;
14*0a6a1f1dSLionel Sambuc
15*0a6a1f1dSLionel Sambuc // Throws: out_of_range if pos > size().
16*0a6a1f1dSLionel Sambuc // Remarks: Let rlen be the smaller of n and size() - pos.
17*0a6a1f1dSLionel Sambuc // Requires: [s, s+rlen) is a valid range.
18*0a6a1f1dSLionel Sambuc // Effects: Equivalent to std::copy_n(begin() + pos, rlen, s).
19*0a6a1f1dSLionel Sambuc // Returns: rlen.
20*0a6a1f1dSLionel Sambuc
21*0a6a1f1dSLionel Sambuc
22*0a6a1f1dSLionel Sambuc #include <experimental/string_view>
23*0a6a1f1dSLionel Sambuc #include <cassert>
24*0a6a1f1dSLionel Sambuc
25*0a6a1f1dSLionel Sambuc template<typename CharT>
test1(std::experimental::basic_string_view<CharT> sv,size_t n,size_t pos)26*0a6a1f1dSLionel Sambuc void test1 ( std::experimental::basic_string_view<CharT> sv, size_t n, size_t pos ) {
27*0a6a1f1dSLionel Sambuc const size_t rlen = std::min ( n, sv.size() - pos );
28*0a6a1f1dSLionel Sambuc
29*0a6a1f1dSLionel Sambuc CharT *dest1 = new CharT [rlen + 1]; dest1[rlen] = 0;
30*0a6a1f1dSLionel Sambuc CharT *dest2 = new CharT [rlen + 1]; dest2[rlen] = 0;
31*0a6a1f1dSLionel Sambuc
32*0a6a1f1dSLionel Sambuc try {
33*0a6a1f1dSLionel Sambuc sv.copy(dest1, n, pos);
34*0a6a1f1dSLionel Sambuc std::copy_n(sv.begin() + pos, rlen, dest2);
35*0a6a1f1dSLionel Sambuc
36*0a6a1f1dSLionel Sambuc for ( size_t i = 0; i <= rlen; ++i )
37*0a6a1f1dSLionel Sambuc assert ( dest1[i] == dest2[i] );
38*0a6a1f1dSLionel Sambuc }
39*0a6a1f1dSLionel Sambuc catch ( const std::out_of_range & ) { assert ( pos > sv.size()); }
40*0a6a1f1dSLionel Sambuc delete [] dest1;
41*0a6a1f1dSLionel Sambuc delete [] dest2;
42*0a6a1f1dSLionel Sambuc }
43*0a6a1f1dSLionel Sambuc
44*0a6a1f1dSLionel Sambuc
45*0a6a1f1dSLionel Sambuc template<typename CharT>
test(const CharT * s)46*0a6a1f1dSLionel Sambuc void test ( const CharT *s ) {
47*0a6a1f1dSLionel Sambuc typedef std::experimental::basic_string_view<CharT> string_view_t;
48*0a6a1f1dSLionel Sambuc
49*0a6a1f1dSLionel Sambuc string_view_t sv1 ( s );
50*0a6a1f1dSLionel Sambuc
51*0a6a1f1dSLionel Sambuc test1(sv1, 0, 0);
52*0a6a1f1dSLionel Sambuc test1(sv1, 1, 0);
53*0a6a1f1dSLionel Sambuc test1(sv1, 20, 0);
54*0a6a1f1dSLionel Sambuc test1(sv1, sv1.size(), 0);
55*0a6a1f1dSLionel Sambuc test1(sv1, 20, string_view_t::npos);
56*0a6a1f1dSLionel Sambuc
57*0a6a1f1dSLionel Sambuc test1(sv1, 0, 3);
58*0a6a1f1dSLionel Sambuc test1(sv1, 2, 3);
59*0a6a1f1dSLionel Sambuc test1(sv1, 100, 3);
60*0a6a1f1dSLionel Sambuc test1(sv1, 100, string_view_t::npos);
61*0a6a1f1dSLionel Sambuc
62*0a6a1f1dSLionel Sambuc test1(sv1, sv1.size(), string_view_t::npos);
63*0a6a1f1dSLionel Sambuc
64*0a6a1f1dSLionel Sambuc test1(sv1, sv1.size() + 1, 0);
65*0a6a1f1dSLionel Sambuc test1(sv1, sv1.size() + 1, 1);
66*0a6a1f1dSLionel Sambuc test1(sv1, sv1.size() + 1, string_view_t::npos);
67*0a6a1f1dSLionel Sambuc
68*0a6a1f1dSLionel Sambuc }
69*0a6a1f1dSLionel Sambuc
main()70*0a6a1f1dSLionel Sambuc int main () {
71*0a6a1f1dSLionel Sambuc test ( "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
72*0a6a1f1dSLionel Sambuc test ( "ABCDE");
73*0a6a1f1dSLionel Sambuc test ( "a" );
74*0a6a1f1dSLionel Sambuc test ( "" );
75*0a6a1f1dSLionel Sambuc
76*0a6a1f1dSLionel Sambuc test ( L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
77*0a6a1f1dSLionel Sambuc test ( L"ABCDE" );
78*0a6a1f1dSLionel Sambuc test ( L"a" );
79*0a6a1f1dSLionel Sambuc test ( L"" );
80*0a6a1f1dSLionel Sambuc
81*0a6a1f1dSLionel Sambuc #if __cplusplus >= 201103L
82*0a6a1f1dSLionel Sambuc test ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
83*0a6a1f1dSLionel Sambuc test ( u"ABCDE" );
84*0a6a1f1dSLionel Sambuc test ( u"a" );
85*0a6a1f1dSLionel Sambuc test ( u"" );
86*0a6a1f1dSLionel Sambuc
87*0a6a1f1dSLionel Sambuc test ( U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
88*0a6a1f1dSLionel Sambuc test ( U"ABCDE" );
89*0a6a1f1dSLionel Sambuc test ( U"a" );
90*0a6a1f1dSLionel Sambuc test ( U"" );
91*0a6a1f1dSLionel Sambuc #endif
92*0a6a1f1dSLionel Sambuc }
93