]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/experimental/filesystem/path/generic/generic_string.cc
i386: Update the comment for mapxf option
[thirdparty/gcc.git] / 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 "" }
4
5 // Copyright (C) 2014-2024 Free Software Foundation, Inc.
6 //
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)
11 // any later version.
12
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.
17
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/>.
21
22 // 8.4.7 path generic format observers [path.generic.obs]
23
24 #include <experimental/filesystem>
25 #include <testsuite_fs.h>
26 #include <testsuite_allocator.h>
27
28 using std::experimental::filesystem::path;
29
30 void
31 test01()
32 {
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" );
36 }
37
38 using __gnu_test::SimpleAllocator;
39
40 void
41 test02()
42 {
43 path p = "//foo//bar//.";
44 using C = char16_t;
45 auto g = p.generic_string<C, std::char_traits<C>, SimpleAllocator<C>>();
46 VERIFY( g == u"//foo/bar/." );
47 }
48
49
50 void
51 test03()
52 {
53 for (path p : { "/a///b//c", "///a//b//c", "a:b//c", "a://b///c" })
54 {
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 );
60 #endif
61 VERIFY( path(p.generic_u8string()) == p );
62 VERIFY( path(p.generic_u16string()) == p );
63 VERIFY( path(p.generic_u32string()) == p );
64 }
65
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() == "/" );
71 }
72
73 int
74 main()
75 {
76 test01();
77 test02();
78 test03();
79 }