1 // { dg-options "-std=gnu++1y" }
3 // Copyright (C) 2013 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
20 // string_view size, length
22 #include <experimental/string_view>
24 #include <testsuite_hooks.h>
31 operator==(const A
<T
>&, const A
<T
>&) { return true; }
35 operator<(const A
<T
>&, const A
<T
>&) { return true; }
39 // char_traits specialization
43 struct char_traits
<A
<B
> >
45 typedef A
<B
> char_type
;
46 // Unsigned as wint_t in unsigned.
47 typedef unsigned long int_type
;
48 typedef streampos pos_type
;
49 typedef streamoff off_type
;
50 typedef mbstate_t state_type
;
53 assign(char_type
& __c1
, const char_type
& __c2
)
57 eq(const char_type
& __c1
, const char_type
& __c2
)
58 { return __c1
== __c2
; }
61 lt(const char_type
& __c1
, const char_type
& __c2
)
62 { return __c1
< __c2
; }
65 compare(const char_type
* __s1
, const char_type
* __s2
, size_t __n
)
67 for (size_t __i
= 0; __i
< __n
; ++__i
)
68 if (!eq(__s1
[__i
], __s2
[__i
]))
69 return lt(__s1
[__i
], __s2
[__i
]) ? -1 : 1;
74 length(const char_type
* __s
)
76 const char_type
* __p
= __s
;
82 static const char_type
*
83 find(const char_type
* __s
, size_t __n
, const char_type
& __a
)
85 for (const char_type
* __p
= __s
; size_t(__p
- __s
) < __n
; ++__p
)
86 if (*__p
== __a
) return __p
;
91 move(char_type
* __s1
, const char_type
* __s2
, size_t __n
)
92 { return (char_type
*) memmove(__s1
, __s2
, __n
* sizeof(char_type
)); }
95 copy(char_type
* __s1
, const char_type
* __s2
, size_t __n
)
96 { return (char_type
*) memcpy(__s1
, __s2
, __n
* sizeof(char_type
)); }
99 assign(char_type
* __s
, size_t __n
, char_type __a
)
101 for (char_type
* __p
= __s
; __p
< __s
+ __n
; ++__p
)
107 to_char_type(const int_type
&)
108 { return char_type(); }
111 to_int_type(const char_type
&) { return int_type(); }
114 eq_int_type(const int_type
& __c1
, const int_type
& __c2
)
115 { return __c1
== __c2
; }
118 eof() { return static_cast<int_type
>(-1); }
121 not_eof(const int_type
& __c
)
122 { return eq_int_type(__c
, eof()) ? int_type(0) : __c
; }
129 bool test
[[gnu::unused
]] = true;
131 std::experimental::basic_string_view
<A
<B
>> str02
;
132 typedef std::experimental::basic_string_view
< A
<B
> >::size_type size_type_o
;
136 // non-POD types: size, length, max_size, clear(), empty()
137 bool b01
= str02
.empty();
138 VERIFY( b01
== true );
140 sz04
= str02
.length();
141 VERIFY( sz03
== sz04
);
144 sz04
= str02
.length();
145 VERIFY( sz03
== sz04
);
147 sz03
= str02
.max_size();
148 VERIFY( sz03
>= sz04
);
153 VERIFY( b01
== true );
155 VERIFY( sz03
>= sz04
);