1*2c545131Sphilnik777 //===----------------------------------------------------------------------===//
2*2c545131Sphilnik777 //
3*2c545131Sphilnik777 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2c545131Sphilnik777 // See https://llvm.org/LICENSE.txt for license information.
5*2c545131Sphilnik777 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2c545131Sphilnik777 //
7*2c545131Sphilnik777 //===----------------------------------------------------------------------===//
8*2c545131Sphilnik777 
9*2c545131Sphilnik777 // UNSUPPORTED: c++03, c++11, c++14, c++17
10*2c545131Sphilnik777 
11*2c545131Sphilnik777 // <filesystem>
12*2c545131Sphilnik777 
13*2c545131Sphilnik777 // class file_status
14*2c545131Sphilnik777 
15*2c545131Sphilnik777 // friend bool operator==(const file_status& lhs, const file_status& rhs) noexcept
16*2c545131Sphilnik777 //   { return lhs.type() == rhs.type() && lhs.permissions() == rhs.permissions(); } // C++20
17*2c545131Sphilnik777 
18*2c545131Sphilnik777 #include <cassert>
19*2c545131Sphilnik777 #include <filesystem>
20*2c545131Sphilnik777 
21*2c545131Sphilnik777 #include "test_comparisons.h"
22*2c545131Sphilnik777 
test()23*2c545131Sphilnik777 void test() {
24*2c545131Sphilnik777   {
25*2c545131Sphilnik777     std::filesystem::file_status f1;
26*2c545131Sphilnik777     std::filesystem::file_status f2;
27*2c545131Sphilnik777 
28*2c545131Sphilnik777     assert(testEquality(f1, f2, true));
29*2c545131Sphilnik777   }
30*2c545131Sphilnik777   {
31*2c545131Sphilnik777     std::filesystem::file_status f1{std::filesystem::file_type::regular, std::filesystem::perms::owner_read};
32*2c545131Sphilnik777     std::filesystem::file_status f2{std::filesystem::file_type::regular, std::filesystem::perms::owner_read};
33*2c545131Sphilnik777 
34*2c545131Sphilnik777     assert(testEquality(f1, f2, true));
35*2c545131Sphilnik777   }
36*2c545131Sphilnik777   {
37*2c545131Sphilnik777     std::filesystem::file_status f1{std::filesystem::file_type::regular, std::filesystem::perms::owner_read};
38*2c545131Sphilnik777     std::filesystem::file_status f2{std::filesystem::file_type::none, std::filesystem::perms::owner_read};
39*2c545131Sphilnik777 
40*2c545131Sphilnik777     assert(testEquality(f1, f2, false));
41*2c545131Sphilnik777   }
42*2c545131Sphilnik777   {
43*2c545131Sphilnik777     std::filesystem::file_status f1{std::filesystem::file_type::regular, std::filesystem::perms::owner_read};
44*2c545131Sphilnik777     std::filesystem::file_status f2{std::filesystem::file_type::regular, std::filesystem::perms::owner_write};
45*2c545131Sphilnik777 
46*2c545131Sphilnik777     assert(testEquality(f1, f2, false));
47*2c545131Sphilnik777   }
48*2c545131Sphilnik777 }
49*2c545131Sphilnik777 
main(int,char **)50*2c545131Sphilnik777 int main(int, char**) {
51*2c545131Sphilnik777   test();
52*2c545131Sphilnik777 
53*2c545131Sphilnik777   return 0;
54*2c545131Sphilnik777 }
55