1 // { dg-do compile { target c++26 } }
2 // { dg-add-options no_pch }
4 #include <text_encoding>
5 #ifndef __cpp_lib_text_encoding
6 # error "Feature-test macro for text_encoding missing in <text_encoding>"
7 #elif __cpp_lib_text_encoding != 202306L
8 # error "Feature-test macro for text_encoding has wrong value in <text_encoding>"
11 #undef __cpp_lib_expected
13 #ifndef __cpp_lib_text_encoding
14 # error "Feature-test macro for text_encoding missing in <version>"
15 #elif __cpp_lib_text_encoding != 202306L
16 # error "Feature-test macro for text_encoding has wrong value in <version>"
21 static_assert( std::is_trivially_copyable_v
<std::text_encoding
> );
23 using aliases_view
= std::text_encoding::aliases_view
;
24 static_assert( std::copyable
<aliases_view
> );
25 static_assert( std::ranges::view
<aliases_view
> );
26 static_assert( std::ranges::random_access_range
<aliases_view
> );
27 static_assert( std::ranges::borrowed_range
<aliases_view
> );
28 static_assert( std::same_as
<std::ranges::range_value_t
<aliases_view
>,
30 static_assert( std::same_as
<std::ranges::range_reference_t
<aliases_view
>,
33 #include <testsuite_hooks.h>
36 test_constexpr_iterator()
38 // This encoding has two aliases, "UTF-8" and "csUTF8".
39 const auto a
= std::text_encoding(std::text_encoding::UTF8
).aliases();
40 const auto begin
= a
.begin();
41 const auto end
= a
.end();
43 VERIFY( *iter
== *begin
);
44 VERIFY( *iter
== iter
[0] );
45 VERIFY( iter
[1] == begin
[1] );
47 VERIFY( iter
== begin
);
49 VERIFY( iter2
== begin
);
50 VERIFY( iter
!= begin
);
52 VERIFY( iter2
!= begin
);
53 VERIFY( iter
== begin
);
54 iter
++++; // Increments prvalue returned by operator++(int) instead of iter.
55 VERIFY( iter
== iter2
);
56 iter
----; // Decrements prvalue returned by operator++(int) instead of iter.
57 VERIFY( iter
== begin
);
58 const auto d
= std::ranges::distance(a
);
60 VERIFY( iter
== end
);
61 VERIFY( (iter
- begin
) == d
);
62 VERIFY( (begin
+ 2) == iter
);
63 VERIFY( (2 + begin
) == iter
);
64 VERIFY( iter
[-1] == begin
[1] );
66 VERIFY( iter
== begin
);
67 VERIFY( *(iter
+ 1) == iter
[1] );
68 VERIFY( (1 + iter
- 1) == begin
);
69 VERIFY( (-1 + (iter
- -2) + -1) == begin
);
71 std::ranges::iterator_t
<std::text_encoding::aliases_view
> singular
{};
72 VERIFY( (singular
+ 0) == singular
);
73 VERIFY( (singular
- 0) == singular
);
77 static_assert( test_constexpr_iterator() );