]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/experimental/filesystem/path/generic/generic_string.cc
1 // { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
2 // { dg-do run { target c++11 } }
3 // { dg-require-filesystem-ts "" }
5 // Copyright (C) 2014-2024 Free Software Foundation, Inc.
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 3, or (at your option)
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
22 // 8.4.7 path generic format observers [path.generic.obs]
24 #include <experimental/filesystem>
25 #include <testsuite_fs.h>
26 #include <testsuite_allocator.h>
28 using std::experimental::filesystem::path
;
33 __gnu_test::compare_paths( path("///a//b///").generic_string(), "/a/b/." );
34 __gnu_test::compare_paths( path("///a//b").generic_u16string(), "/a/b" );
35 __gnu_test::compare_paths( path("//a//b").generic_u16string(), "//a/b" );
38 using __gnu_test::SimpleAllocator
;
43 path p
= "//foo//bar//.";
45 auto g
= p
.generic_string
<C
, std::char_traits
<C
>, SimpleAllocator
<C
>>();
46 VERIFY( g
== u
"//foo/bar/." );
53 for (path p
: { "/a///b//c", "///a//b//c", "a:b//c", "a://b///c" })
55 // A path constructed from the generic format string should compare equal
56 // to the original, because they represent the same path.
57 VERIFY( path(p
.generic_string()) == p
);
58 #ifdef _GLIBCXX_USE_WCHAR_T
59 VERIFY( path(p
.generic_wstring()) == p
);
61 VERIFY( path(p
.generic_u8string()) == p
);
62 VERIFY( path(p
.generic_u16string()) == p
);
63 VERIFY( path(p
.generic_u32string()) == p
);
66 // Except when the original consists entirely of a root-directory with
67 // multiple slashes, because path("///").native() is "///" but the
68 // generic format string is "/". In the Filesystem TS path::compare just
69 // compares native strings, so path("///") != path("/").
70 VERIFY( path("///").generic_string() == "/" );