//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03 // // class path // template // path(const Source& source); // template // path(InputIterator first, InputIterator last); #include "filesystem_include.h" #include #include #include "test_macros.h" #include "test_iterators.h" #include "min_allocator.h" #include "filesystem_test_helper.h" template void RunTestCaseImpl(MultiStringType const& MS, Args... args) { using namespace fs; const char* Expect = MS; const CharT* TestPath = MS; const CharT* TestPathEnd = StrEnd(TestPath); const std::size_t Size = TestPathEnd - TestPath; const std::size_t SSize = StrEnd(Expect) - Expect; assert(Size == SSize); // StringTypes { const std::basic_string S(TestPath); path p(S, args...); assert(p.native() == Expect); assert(p.string() == TestPath); assert(p.string() == S); } { const std::basic_string_view S(TestPath); path p(S, args...); assert(p.native() == Expect); assert(p.string() == TestPath); assert(p.string() == S); } // Char* pointers { path p(TestPath, args...); assert(p.native() == Expect); assert(p.string() == TestPath); } { path p(TestPath, TestPathEnd, args...); assert(p.native() == Expect); assert(p.string() == TestPath); } // Iterators { using It = input_iterator; path p(It{TestPath}, args...); assert(p.native() == Expect); assert(p.string() == TestPath); } { using It = input_iterator; path p(It{TestPath}, It{TestPathEnd}, args...); assert(p.native() == Expect); assert(p.string() == TestPath); } } template void RunTestCase(MultiStringType const& MS) { RunTestCaseImpl(MS); RunTestCaseImpl(MS, fs::path::format::auto_format); RunTestCaseImpl(MS, fs::path::format::native_format); RunTestCaseImpl(MS, fs::path::format::generic_format); } void test_sfinae() { using namespace fs; { using It = const char* const; static_assert(std::is_constructible::value, ""); } { using It = input_iterator; static_assert(std::is_constructible::value, ""); } { struct Traits { using iterator_category = std::input_iterator_tag; using value_type = const char; using pointer = const char*; using reference = const char&; using difference_type = std::ptrdiff_t; }; using It = input_iterator; static_assert(std::is_constructible::value, ""); } { using It = output_iterator; static_assert(!std::is_constructible::value, ""); } { static_assert(!std::is_constructible::value, ""); } } int main(int, char**) { for (auto const& MS : PathList) { RunTestCase(MS); RunTestCase(MS); RunTestCase(MS); RunTestCase(MS); } test_sfinae(); return 0; }