]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/experimental/filesystem/path/generic/generic_string.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / experimental / filesystem / path / generic / generic_string.cc
CommitLineData
ef0e80d2 1// { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
52066eae 2// { dg-do run { target c++11 } }
0ca7ba9a
JW
3// { dg-require-filesystem-ts "" }
4
99dee823 5// Copyright (C) 2014-2021 Free Software Foundation, Inc.
0ca7ba9a
JW
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>
a577c0c2 26#include <testsuite_allocator.h>
0ca7ba9a
JW
27
28using std::experimental::filesystem::path;
29
30void
31test01()
32{
a577c0c2
JW
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
38using __gnu_test::SimpleAllocator;
39
40void
41test02()
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
50void
51test03()
52{
53 for (path p : { "/a///b//c", "///a//b//c", "a:b//c", "a://b///c" })
0ca7ba9a 54 {
a577c0c2
JW
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 VERIFY( path(p.generic_wstring()) == p );
59 VERIFY( path(p.generic_u8string()) == p );
60 VERIFY( path(p.generic_u16string()) == p );
61 VERIFY( path(p.generic_u32string()) == p );
0ca7ba9a 62 }
a577c0c2
JW
63
64 // Except when the original consists entirely of a root-directory with
65 // multiple slashes, because path("///").native() is "///" but the
66 // generic format string is "/". In the Filesystem TS path::compare just
67 // compares native strings, so path("///") != path("/").
68 VERIFY( path("///").generic_string() == "/" );
0ca7ba9a
JW
69}
70
71int
72main()
73{
74 test01();
a577c0c2
JW
75 test02();
76 test03();
0ca7ba9a 77}