1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // REQUIRES: can-create-symlinks
10 // UNSUPPORTED: c++03, c++11, c++14
11 // UNSUPPORTED: no-filesystem
12 // UNSUPPORTED: availability-filesystem-missing
13
14 // <filesystem>
15
16 // class directory_iterator
17
18 // directory_iterator begin(directory_iterator iter) noexcept;
19 // directory_iterator end(directory_iterator iter) noexcept;
20
21 #include <filesystem>
22 #include <type_traits>
23 #include <set>
24 #include <cassert>
25
26 #include "test_macros.h"
27 #include "filesystem_test_helper.h"
28 namespace fs = std::filesystem;
29 using namespace fs;
30
test_function_signatures()31 static void test_function_signatures()
32 {
33 directory_iterator d;
34
35 ASSERT_SAME_TYPE(decltype(begin(d)), directory_iterator);
36 ASSERT_SAME_TYPE(decltype(begin(std::move(d))), directory_iterator);
37 ASSERT_NOEXCEPT(begin(d));
38 ASSERT_NOEXCEPT(begin(std::move(d)));
39
40 ASSERT_SAME_TYPE(decltype(end(d)), directory_iterator);
41 ASSERT_SAME_TYPE(decltype(end(std::move(d))), directory_iterator);
42 ASSERT_NOEXCEPT(end(d));
43 ASSERT_NOEXCEPT(end(std::move(d)));
44 }
45
test_ranged_for_loop()46 static void test_ranged_for_loop()
47 {
48 static_test_env static_env;
49 const path testDir = static_env.Dir;
50 std::set<path> dir_contents(static_env.DirIterationList.begin(),
51 static_env.DirIterationList.end());
52
53 std::error_code ec;
54 directory_iterator it(testDir, ec);
55 assert(!ec);
56
57 for (auto& elem : it) {
58 assert(dir_contents.erase(elem) == 1);
59 }
60 assert(dir_contents.empty());
61 }
62
main(int,char **)63 int main(int, char**) {
64 test_function_signatures();
65 test_ranged_for_loop();
66
67 return 0;
68 }
69