| // { 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() ); | |
| } |