
This adds a new dejagnu directive which can be used to make a test depend on a feature test macro such as __cpp_lib_text_encoding. This is mroe flexible than writing a new dg-require-xxx for each feature. libstdc++-v3/ChangeLog: * testsuite/lib/dg-options.exp (dg-require-cpp-feature-test): New proc. * testsuite/lib/libstdc++.exp (check_v3_target_cpp_feature_test): New proc. * testsuite/std/text_encoding/cons.cc: Use new directive to skip the test if the __cpp_lib_text_encoding feature test macro is not defined. * testsuite/std/text_encoding/requirements.cc: Likewise.
119 lines
2.9 KiB
C++
119 lines
2.9 KiB
C++
// { 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() );
|
|
}
|