Test Suite results on C++17 Filesystem Implementations

This page collects the results of running the test suite from my ghc::filesystem on
std::filesystem implementations of various compiler suites. Shown are only issues that
trigger a fail or a warning, compared to the behaviour of ghc::filesystem.

Title clang-7.1clang-8.0clang-9.0.1gcc-8.3gcc-9.2msvc-19.16msvc-19.23
[fs.path.generic]
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:363: 
warning:
  This implementation doesn't support path("//host").has_root_name() == true
  [C++17 30.12.8.1 par. 4] on this platform, tests based on this are skipped.
  (Should be okay.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:363: 
warning:
  This implementation doesn't support path("//host").has_root_name() == true
  [C++17 30.12.8.1 par. 4] on this platform, tests based on this are skipped.
  (Should be okay.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:363: 
warning:
  This implementation doesn't support path("//host").has_root_name() == true
  [C++17 30.12.8.1 par. 4] on this platform, tests based on this are skipped.
  (Should be okay.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:363: 
warning:
  This implementation doesn't support path("//host").has_root_name() == true
  [C++17 30.12.8.1 par. 4] on this platform, tests based on this are skipped.
  (Should be okay.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:363: 
warning:
  This implementation doesn't support path("//host").has_root_name() == true
  [C++17 30.12.8.1 par. 4] on this platform, tests based on this are skipped.
  (Should be okay.)
   
[fs.path.native.obs]     
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:574: FAILED:
  CHECK( fs::u8path("\xc3\xa4/\xe2\x82\xac\xf0\x9d\x84\x9e").u16string() == std::u16string(u"\u00E4/\u20AC\U0001D11E") )
due to unexpected exception with messages:
  This check might fail on GCC8 (with "Illegal byte sequence") due to not
  detecting the valid unicode codepoint U+1D11E.
  filesystem error: Cannot convert character sequence: Invalid or incomplete
  multibyte or wide character
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:570: FAILED:
  CHECK( fs::u8path("\xc3\xa4/\xe2\x82\xac").wstring() == std::wstring(L"ä/€") )
due to unexpected exception with message:
  filesystem error: Cannot convert character sequence: Invalid or incomplete
  multibyte or wide character
   
[fs.path.generic.obs]       
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:599: FAILED:
  CHECK( fs::u8path("\xc3\xa4/\xe2\x82\xac").generic_wstring() == std::wstring(L"ä/€") )
due to unexpected exception with message:
  filesystem error: Cannot convert character sequence: Invalid or incomplete
  multibyte or wide character
   
[fs.path.itr]         
C:\projects\filesystem\test\filesystem_test.cpp(965): FAILED:
  CHECK( "/,foo,bar" == iterateResult(fs::path("///foo/bar")) )
with expansion:
  "/,foo,bar" == "///,foo,bar"
C:\projects\filesystem\test\filesystem_test.cpp(982): FAILED:
  CHECK( "bar,foo,/" == reverseIterateResult(fs::path("///foo/bar")) )
with expansion:
  "bar,foo,/" == "bar,foo,///"
C:\projects\filesystem\test\filesystem_test.cpp(965): FAILED:
  CHECK( "/,foo,bar" == iterateResult(fs::path("///foo/bar")) )
with expansion:
  "/,foo,bar" == "///,foo,bar"
C:\projects\filesystem\test\filesystem_test.cpp(982): FAILED:
  CHECK( "bar,foo,/" == reverseIterateResult(fs::path("///foo/bar")) )
with expansion:
  "bar,foo,/" == "bar,foo,///"
[fs.path.io]         
C:\projects\filesystem\test\filesystem_test.cpp(1052): FAILED:
  CHECK( os.str() == "\"\\\\root\\\\foo bar\"" )
with expansion:
  ""/root/foo bar"" == ""\\root\\foo bar""
C:\projects\filesystem\test\filesystem_test.cpp(1061): FAILED:
  CHECK( os.str() == "\"\\\\root\\\\foo\\\"bar\"" )
with expansion:
  ""/root/foo\"bar"" == ""\\root\\foo\"bar""
C:\projects\filesystem\test\filesystem_test.cpp(1052): FAILED:
  CHECK( os.str() == "\"\\\\root\\\\foo bar\"" )
with expansion:
  ""/root/foo bar"" == ""\\root\\foo bar""
C:\projects\filesystem\test\filesystem_test.cpp(1061): FAILED:
  CHECK( os.str() == "\"\\\\root\\\\foo\\\"bar\"" )
with expansion:
  ""/root/foo\"bar"" == ""\\root\\foo\"bar""
[fs.dir.entry]
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1191: FAILED:
  CHECK_THROWS_AS( none.refresh(), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1195: FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1242: FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1191: FAILED:
  CHECK_THROWS_AS( none.refresh(), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1195: FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1242: FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1191: FAILED:
  CHECK_THROWS_AS( none.refresh(), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1195: FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1242: FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1191: FAILED:
  CHECK_THROWS_AS( none.refresh(), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1195: FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1242: FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1191: FAILED:
  CHECK_THROWS_AS( none.refresh(), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1195: FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1242: FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
 
C:\projects\filesystem\test\filesystem_test.cpp(1195): FAILED:
  CHECK_THROWS_AS( de.assign(""), fs::filesystem_error )
because no exception was thrown where one was expected:
C:\projects\filesystem\test\filesystem_test.cpp(1198): FAILED:
  CHECK( ec )
with expansion:
  system:0
C:\projects\filesystem\test\filesystem_test.cpp(1242): FAILED:
  CHECK_THROWS_AS( de.replace_filename("bar"), fs::filesystem_error )
because no exception was thrown where one was expected:
C:\projects\filesystem\test\filesystem_test.cpp(1246): FAILED:
  CHECK( ec )
with expansion:
  system:0
C:\projects\filesystem\test\filesystem_test.cpp(1261): FAILED:
  CHECK( de2none.status().type() == fs::file_type::not_found )
with expansion:
  2 == 1
C:\projects\filesystem\test\filesystem_test.cpp(1262): FAILED:
  CHECK( de2none.status(ec).type() == fs::file_type::not_found )
with expansion:
  2 == 1
C:\projects\filesystem\test\filesystem_test.cpp(1263): FAILED:
  CHECK( ec )
with expansion:
  system:0
[fs.op.absolute]     
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1503: FAILED:
  CHECK( fs::absolute("") == fs::current_path() / "" )
due to unexpected exception with message:
  filesystem error: cannot make absolute path: Invalid argument
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1509: FAILED:
  CHECK( fs::absolute("", ec) == fs::current_path() / "" )
with expansion:
  ""
  ==
  "/home/travis/build/gulrak/filesystem/build/"
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1510: FAILED:
  CHECK( !ec )
with expansion:
  false
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1503: FAILED:
  CHECK( fs::absolute("") == fs::current_path() / "" )
due to unexpected exception with message:
  filesystem error: cannot make absolute path: Invalid argument []
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1509: FAILED:
  CHECK( fs::absolute("", ec) == fs::current_path() / "" )
with expansion:
  ""
  ==
  "/home/travis/build/gulrak/filesystem/build/"
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1510: FAILED:
  CHECK( !ec )
with expansion:
  false
C:\projects\filesystem\test\filesystem_test.cpp(1503): FAILED:
  CHECK( fs::absolute("") == fs::current_path() / "" )
with expansion:
  "" == "C:\projects\filesystem\build\"
C:\projects\filesystem\test\filesystem_test.cpp(1505): FAILED:
  CHECK( fs::absolute(".") == fs::current_path() / "." )
with expansion:
  "C:\projects\filesystem\build"
  ==
  "C:\projects\filesystem\build\."
C:\projects\filesystem\test\filesystem_test.cpp(1509): FAILED:
  CHECK( fs::absolute("", ec) == fs::current_path() / "" )
with expansion:
  "" == "C:\projects\filesystem\build\"
C:\projects\filesystem\test\filesystem_test.cpp(1503): FAILED:
  CHECK( fs::absolute("") == fs::current_path() / "" )
with expansion:
  "" == "C:\projects\filesystem\build\"
C:\projects\filesystem\test\filesystem_test.cpp(1505): FAILED:
  CHECK( fs::absolute(".") == fs::current_path() / "." )
with expansion:
  "C:\projects\filesystem\build"
  ==
  "C:\projects\filesystem\build\."
C:\projects\filesystem\test\filesystem_test.cpp(1509): FAILED:
  CHECK( fs::absolute("", ec) == fs::current_path() / "" )
with expansion:
  "" == "C:\projects\filesystem\build\"
[fs.op.canonical]
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1517: FAILED:
  CHECK_THROWS_AS( fs::canonical(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1520: FAILED:
  CHECK( fs::canonical("", ec) == "" )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  ""
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1521: FAILED:
  CHECK( ec )
with expansion:
  system:0
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1517: FAILED:
  CHECK_THROWS_AS( fs::canonical(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1520: FAILED:
  CHECK( fs::canonical("", ec) == "" )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  ""
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1521: FAILED:
  CHECK( ec )
with expansion:
  system:0
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1517: FAILED:
  CHECK_THROWS_AS( fs::canonical(""), fs::filesystem_error )
because no exception was thrown where one was expected:
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1520: FAILED:
  CHECK( fs::canonical("", ec) == "" )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  ""
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1521: FAILED:
  CHECK( ec )
with expansion:
  system:0
   
C:\projects\filesystem\test\filesystem_test.cpp(1517): FAILED:
  CHECK_THROWS_AS( fs::canonical(""), fs::filesystem_error )
because no exception was thrown where one was expected:
C:\projects\filesystem\test\filesystem_test.cpp(1521): FAILED:
  CHECK( ec )
with expansion:
  system:0
C:\projects\filesystem\test\filesystem_test.cpp(1517): FAILED:
  CHECK_THROWS_AS( fs::canonical(""), fs::filesystem_error )
because no exception was thrown where one was expected:
C:\projects\filesystem\test\filesystem_test.cpp(1521): FAILED:
  CHECK( ec )
with expansion:
  system:0
[fs.op.create_directories]         
C:\projects\filesystem\test\filesystem_test.cpp(1709): FAILED:
  CHECK_THROWS_AS( fs::create_directories(p), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
C:\projects\filesystem\test\filesystem_test.cpp(1714): FAILED:
  CHECK( ec )
with expansion:
  system:0
with message:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
 
[fs.op.create_directory]
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1756: FAILED:
  REQUIRE_THROWS_AS( fs::create_directory(p), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1756: FAILED:
  REQUIRE_THROWS_AS( fs::create_directory(p), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1756: FAILED:
  REQUIRE_THROWS_AS( fs::create_directory(p), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
   
C:\projects\filesystem\test\filesystem_test.cpp(1756): FAILED:
  REQUIRE_THROWS_AS( fs::create_directory(p), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects conformance with P1164R1. (implemented by GCC with issue
  #86910.)
 
[fs.op.equivalent]     
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1854: FAILED:
  REQUIRE_THROWS_AS( fs::equivalent("foo", "foo3"), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects LWG #2937 result conformance.
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:1854: FAILED:
  REQUIRE_THROWS_AS( fs::equivalent("foo", "foo3"), fs::filesystem_error )
because no exception was thrown where one was expected:
  This test expects LWG #2937 result conformance.
   
[fs.op.weakly_canonical]
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2600: FAILED:
  CHECK( fs::weakly_canonical("") == "." )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  "."
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2600: FAILED:
  CHECK( fs::weakly_canonical("") == "." )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  "."
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2600: FAILED:
  CHECK( fs::weakly_canonical("") == "." )
with expansion:
  "/home/travis/build/gulrak/filesystem/build"
  ==
  "."
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2600: FAILED:
  CHECK( fs::weakly_canonical("") == "." )
with expansion:
  "" == "."
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2607: FAILED:
  CHECK( fs::weakly_canonical("foo/bar") == fs::current_path() / "foo/bar" )
with expansion:
  "foo/bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/foo/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2608: FAILED:
  CHECK( fs::weakly_canonical("foo/./bar") == fs::current_path() / "foo/bar" )
with expansion:
  "foo/bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/foo/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2609: FAILED:
  CHECK( fs::weakly_canonical("foo/../bar") == fs::current_path() / "bar" )
with expansion:
  "bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2600: FAILED:
  CHECK( fs::weakly_canonical("") == "." )
with expansion:
  "" == "."
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2607: FAILED:
  CHECK( fs::weakly_canonical("foo/bar") == fs::current_path() / "foo/bar" )
with expansion:
  "foo/bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/foo/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2608: FAILED:
  CHECK( fs::weakly_canonical("foo/./bar") == fs::current_path() / "foo/bar" )
with expansion:
  "foo/bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/foo/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")
/home/travis/build/gulrak/filesystem/test/filesystem_test.cpp:2609: FAILED:
  CHECK( fs::weakly_canonical("foo/../bar") == fs::current_path() / "bar" )
with expansion:
  "bar"
  ==
  "/home/travis/build/gulrak/filesystem/build/bar"
with message:
  This might fail on std::implementations that return fs::current_path() for
  fs::canonical("")