diff --git a/test/filesystem_test.cpp b/test/filesystem_test.cpp index 04ffce0..3c70bc3 100644 --- a/test/filesystem_test.cpp +++ b/test/filesystem_test.cpp @@ -31,10 +31,13 @@ //--------------------------------------------------------------------------------------- #include #include +#include #include #include #include +#include #include +#include #include #ifndef WIN32 #include @@ -197,6 +200,41 @@ static bool has_host_root_name_support() return fs::path("//host").has_root_name(); } + +template +class TestAllocator +{ +public: + using value_type = T; + + TestAllocator() noexcept {} + template TestAllocator(TestAllocator const&) noexcept {} + + value_type* allocate(std::size_t n) + { + return static_cast(::operator new (n*sizeof(value_type))); + } + + void deallocate(value_type* p, std::size_t) noexcept + { + ::operator delete(p); + } +}; + +template +bool operator==(TestAllocator const&, TestAllocator const&) noexcept +{ + return true; +} + +template +bool operator!=(TestAllocator const& x, TestAllocator const& y) noexcept +{ + return !(x == y); +} + + + TEST_CASE("Temporary Directory", "[temp dir]") { fs::path tempPath; @@ -424,12 +462,16 @@ TEST_CASE("30.10.8.4.7 path generic format observers", "[filesystem][path][fs.pa { #ifdef GHC_OS_WINDOWS CHECK(fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_string() == std::string("\xc3\xa4/\xe2\x82\xac")); + auto t = fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_string, TestAllocator>() + CHECK(t.c_str() == std::string("\xc3\xa4/\xe2\x82\xac")); CHECK(fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_wstring() == std::wstring(L"\U000000E4/\U000020AC")); CHECK(fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_u8string() == std::string("\xc3\xa4/\xe2\x82\xac")); CHECK(fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_u16string() == std::u16string(u"\u00E4/\u20AC")); CHECK(fs::u8path("\xc3\xa4\\\xe2\x82\xac").generic_u32string() == std::u32string(U"\U000000E4/\U000020AC")); #else CHECK(fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_string() == std::string(u8"\xc3\xa4/\xe2\x82\xac")); + auto t = fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_string, TestAllocator>(); + CHECK(t.c_str() == std::string(u8"\xc3\xa4/\xe2\x82\xac")); CHECK(fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_wstring() == std::wstring(L"ä/€")); CHECK(fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_u8string() == std::string(u8"\xc3\xa4/\xe2\x82\xac")); CHECK(fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_u16string() == std::u16string(u"\u00E4/\u20AC"));