16e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//===----------------------------------------------------------------------===//
26e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//
36e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//                     The LLVM Compiler Infrastructure
46e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//
56e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open
66e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// Source Licenses. See LICENSE.TXT for details.
76e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//
86e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier//===----------------------------------------------------------------------===//
96e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
106e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// UNSUPPORTED: c++98, c++03
116e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
126e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// <experimental/filesystem>
136e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
146e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// class directory_iterator
156e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
166e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier// directory_iterator(directory_iterator const&);
176e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
186e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <experimental/filesystem>
196e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <type_traits>
206e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <set>
216e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include <cassert>
226e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
236e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "test_macros.h"
246e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "rapid-cxx-test.hpp"
256e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier#include "filesystem_test_helper.hpp"
266e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
276e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselierusing namespace std::experimental::filesystem;
286e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
296e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE(directory_iterator_copy_construct_tests)
306e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
316e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_constructor_signature)
326e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{
336e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    using D = directory_iterator;
346e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    static_assert(std::is_copy_constructible<D>::value, "");
356e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier}
366e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
376e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_copy_end_iterator)
386e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{
396e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const directory_iterator endIt;
406e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    directory_iterator it(endIt);
416e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    TEST_CHECK(it == endIt);
426e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier}
436e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
446e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_CASE(test_copy_valid_iterator)
456e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier{
466e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const path testDir = StaticEnv::Dir;
476e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const directory_iterator endIt{};
486e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
496e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const directory_iterator it(testDir);
506e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    TEST_REQUIRE(it != endIt);
516e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const path entry = *it;
526e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
536e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    const directory_iterator it2(it);
546e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    TEST_REQUIRE(it2 == it);
556e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    TEST_CHECK(*it2 == entry);
566e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier    TEST_CHECK(*it == entry);
576e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier}
586e9a694dce70319e60dbdfb09cf055bacb4c948eEric Fiselier
596e9a694dce70319e60dbdfb09cf055bacb4c948eEric FiselierTEST_SUITE_END()
60