1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // UNSUPPORTED: c++98, c++03
11 
12 // <filesystem>
13 
14 // bool status_known(file_status s) noexcept;
15 
16 #include "filesystem_include.hpp"
17 #include <type_traits>
18 #include <cassert>
19 
20 #include "test_macros.h"
21 #include "rapid-cxx-test.hpp"
22 #include "filesystem_test_helper.hpp"
23 
24 using namespace fs;
25 
26 TEST_SUITE(status_known_test_suite)
27 
TEST_CASE(signature_test)28 TEST_CASE(signature_test)
29 {
30     file_status s; ((void)s);
31     ASSERT_SAME_TYPE(decltype(status_known(s)), bool);
32     ASSERT_NOEXCEPT(status_known(s));
33 }
34 
TEST_CASE(status_known_test)35 TEST_CASE(status_known_test)
36 {
37     struct TestCase {
38         file_type type;
39         bool expect;
40     };
41     const TestCase testCases[] = {
42         {file_type::none, false},
43         {file_type::not_found, true},
44         {file_type::regular, true},
45         {file_type::directory, true},
46         {file_type::symlink, true},
47         {file_type::block, true},
48         {file_type::character, true},
49         {file_type::fifo, true},
50         {file_type::socket, true},
51         {file_type::unknown, true}
52     };
53     for (auto& TC : testCases) {
54         file_status s(TC.type);
55         TEST_CHECK(status_known(s) == TC.expect);
56     }
57 }
58 
59 TEST_SUITE_END()
60