blob: 4196e32ea8b73be6712536bdd0e2f287e15e6ac6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
// { dg-do run { target c++26 } }
// { dg-require-cpp-feature-test "__cpp_lib_text_encoding" }
#include <text_encoding>
#include <string_view>
#include <testsuite_hooks.h>
using namespace std::string_view_literals;
constexpr void
test_default_construct()
{
std::text_encoding e0;
VERIFY( e0.mib() == std::text_encoding::unknown );
VERIFY( e0.name()[0] == '\0' ); // P2862R1 name() should never return null
VERIFY( e0.aliases().empty() );
}
constexpr void
test_construct_by_name()
{
std::string_view s;
std::text_encoding e0(s);
VERIFY( e0.mib() == std::text_encoding::other );
VERIFY( e0.name() == s );
VERIFY( e0.aliases().empty() );
s = "not a real encoding";
std::text_encoding e1(s);
VERIFY( e1.mib() == std::text_encoding::other );
VERIFY( e1.name() == s );
VERIFY( e1.aliases().empty() );
VERIFY( e1 != e0 );
VERIFY( e1 == e0.mib() );
s = "utf8";
std::text_encoding e2(s);
VERIFY( e2.mib() == std::text_encoding::UTF8 );
VERIFY( e2.name() == s );
VERIFY( ! e2.aliases().empty() );
VERIFY( e2.aliases().front() == "UTF-8"sv );
s = "Latin-1"; // matches "latin1"
std::text_encoding e3(s);
VERIFY( e3.mib() == std::text_encoding::ISOLatin1 );
VERIFY( e3.name() == s );
VERIFY( ! e3.aliases().empty() );
VERIFY( e3.aliases().front() == "ISO_8859-1:1987"sv ); // primary name
s = "U.S."; // matches "us"
std::text_encoding e4(s);
VERIFY( e4.mib() == std::text_encoding::ASCII );
VERIFY( e4.name() == s );
VERIFY( ! e4.aliases().empty() );
VERIFY( e4.aliases().front() == "US-ASCII"sv ); // primary name
s = "ascii";
std::text_encoding e5(s);
VERIFY( e5.mib() == std::text_encoding::ASCII );
VERIFY( e5.name() == s );
}
constexpr void
test_construct_by_id()
{
std::text_encoding e0(std::text_encoding::other);
VERIFY( e0.mib() == std::text_encoding::other );
VERIFY( e0.name() == ""sv );
VERIFY( e0.aliases().empty() );
std::text_encoding e1(std::text_encoding::unknown);
VERIFY( e1.mib() == std::text_encoding::unknown );
VERIFY( e1.name() == ""sv );
VERIFY( e1.aliases().empty() );
std::text_encoding e2(std::text_encoding::UTF8);
VERIFY( e2.mib() == std::text_encoding::UTF8 );
VERIFY( e2.name() == "UTF-8"sv );
VERIFY( ! e2.aliases().empty() );
VERIFY( e2.aliases().front() == std::string_view(e2.name()) );
bool found = false;
for (auto alias : e2.aliases())
if (alias == "csUTF8"sv)
{
found = true;
break;
}
VERIFY( found );
}
constexpr void
test_copy_construct()
{
std::text_encoding e0;
std::text_encoding e1 = e0;
VERIFY( e1 == e0 );
std::text_encoding e2(std::text_encoding::UTF8);
auto e3 = e2;
VERIFY( e3 == e2 );
e1 = e3;
VERIFY( e1 == e2 );
}
int main()
{
auto run_tests = [] {
test_default_construct();
test_construct_by_name();
test_construct_by_id();
test_copy_construct();
return true;
};
run_tests();
static_assert( run_tests() );
}
|