1f7b43230SLouis Dionne //===----------------------------------------------------------------------===//
2f7b43230SLouis Dionne //
3f7b43230SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f7b43230SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5f7b43230SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f7b43230SLouis Dionne //
7f7b43230SLouis Dionne //===----------------------------------------------------------------------===//
8f7b43230SLouis Dionne
931cbe0f2SLouis Dionne // UNSUPPORTED: c++03
10f7b43230SLouis Dionne
11f7b43230SLouis Dionne // <filesystem>
12f7b43230SLouis Dionne
13f7b43230SLouis Dionne // class path
14f7b43230SLouis Dionne
15f7b43230SLouis Dionne // path& make_preferred()
16f7b43230SLouis Dionne
17cc89063bSNico Weber #include "filesystem_include.h"
18f7b43230SLouis Dionne #include <type_traits>
19f7b43230SLouis Dionne #include <cassert>
20f7b43230SLouis Dionne
21f7b43230SLouis Dionne #include "test_macros.h"
22f7b43230SLouis Dionne #include "test_iterators.h"
23cc89063bSNico Weber #include "count_new.h"
24cc89063bSNico Weber #include "filesystem_test_helper.h"
25f7b43230SLouis Dionne
26f7b43230SLouis Dionne
27f7b43230SLouis Dionne struct MakePreferredTestcase {
28f7b43230SLouis Dionne const char* value;
29*87d7c000SMartin Storsjö const char* expected_posix;
30*87d7c000SMartin Storsjö const char* expected_windows;
31f7b43230SLouis Dionne };
32f7b43230SLouis Dionne
33f7b43230SLouis Dionne const MakePreferredTestcase TestCases[] =
34f7b43230SLouis Dionne {
35*87d7c000SMartin Storsjö {"", "", ""}
36*87d7c000SMartin Storsjö , {"hello_world", "hello_world", "hello_world"}
37*87d7c000SMartin Storsjö , {"/", "/", "\\"}
38*87d7c000SMartin Storsjö , {"/foo/bar/baz/", "/foo/bar/baz/", "\\foo\\bar\\baz\\"}
39*87d7c000SMartin Storsjö , {"\\", "\\", "\\"}
40*87d7c000SMartin Storsjö , {"\\foo\\bar\\baz\\", "\\foo\\bar\\baz\\", "\\foo\\bar\\baz\\"}
41*87d7c000SMartin Storsjö , {"\\foo\\/bar\\/baz\\", "\\foo\\/bar\\/baz\\", "\\foo\\\\bar\\\\baz\\"}
42f7b43230SLouis Dionne };
43f7b43230SLouis Dionne
main(int,char **)44f7b43230SLouis Dionne int main(int, char**)
45f7b43230SLouis Dionne {
46f7b43230SLouis Dionne // This operation is an identity operation on linux.
47*87d7c000SMartin Storsjö // On windows, compare with preferred_win, if set.
48f7b43230SLouis Dionne using namespace fs;
49f7b43230SLouis Dionne for (auto const & TC : TestCases) {
50f7b43230SLouis Dionne path p(TC.value);
51f7b43230SLouis Dionne assert(p == TC.value);
52f7b43230SLouis Dionne path& Ref = (p.make_preferred());
53*87d7c000SMartin Storsjö #ifdef _WIN32
54*87d7c000SMartin Storsjö std::string s(TC.expected_windows);
55*87d7c000SMartin Storsjö #else
56*87d7c000SMartin Storsjö std::string s(TC.expected_posix);
57*87d7c000SMartin Storsjö #endif
58*87d7c000SMartin Storsjö assert(p.string() == s);
59f7b43230SLouis Dionne assert(&Ref == &p);
60f7b43230SLouis Dionne }
61f7b43230SLouis Dionne
62f7b43230SLouis Dionne return 0;
63f7b43230SLouis Dionne }
64