xref: /minix3/external/bsd/libc++/dist/libcxx/test/experimental/string.view/string.view.ops/copy.pass.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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