1f7b43230SLouis Dionne //===----------------------------------------------------------------------===// 2f7b43230SLouis Dionne // 3f7b43230SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f7b43230SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5f7b43230SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f7b43230SLouis Dionne // 7f7b43230SLouis Dionne //===----------------------------------------------------------------------===// 8f7b43230SLouis Dionne 9*ac8c9f1eSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14 106be11e35SMartin Storsjö // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS 11c352fa74SLouis Dionne // UNSUPPORTED: availability-filesystem-missing 12f7b43230SLouis Dionne 13f7b43230SLouis Dionne // <filesystem> 14f7b43230SLouis Dionne 15f7b43230SLouis Dionne // template <class Source> 16f7b43230SLouis Dionne // path u8path(Source const&); 17f7b43230SLouis Dionne // template <class InputIter> 18f7b43230SLouis Dionne // path u8path(InputIter, InputIter); 19f7b43230SLouis Dionne 20*ac8c9f1eSLouis Dionne #include <filesystem> 21f7b43230SLouis Dionne #include <cassert> 22c352fa74SLouis Dionne #include <string> 23c352fa74SLouis Dionne #include <type_traits> 24f7b43230SLouis Dionne 25f7b43230SLouis Dionne #include "test_macros.h" 26f7b43230SLouis Dionne #include "test_iterators.h" 27cc89063bSNico Weber #include "count_new.h" 28*ac8c9f1eSLouis Dionne namespace fs = std::filesystem; 29f7b43230SLouis Dionne main(int,char **)30f7b43230SLouis Dionneint main(int, char**) 31f7b43230SLouis Dionne { 32f7b43230SLouis Dionne using namespace fs; 33f7b43230SLouis Dionne const char* In1 = "abcd/efg"; 34f7b43230SLouis Dionne const std::string In2(In1); 35f7b43230SLouis Dionne const auto In3 = In2.begin(); 36f7b43230SLouis Dionne const auto In3End = In2.end(); 37f7b43230SLouis Dionne { 38f7b43230SLouis Dionne path p = fs::u8path(In1); 39f7b43230SLouis Dionne assert(p == In1); 40f7b43230SLouis Dionne } 41f7b43230SLouis Dionne { 42f7b43230SLouis Dionne path p = fs::u8path(In2); 43f7b43230SLouis Dionne assert(p == In1); 44f7b43230SLouis Dionne } 45f7b43230SLouis Dionne { 4612dd9cdfSArthur O'Dwyer path p = fs::u8path(In2.data()); 47f7b43230SLouis Dionne assert(p == In1); 48f7b43230SLouis Dionne } 49f7b43230SLouis Dionne { 50f7b43230SLouis Dionne path p = fs::u8path(In3, In3End); 51f7b43230SLouis Dionne assert(p == In1); 52f7b43230SLouis Dionne } 53fedbd264SMark de Wever #if TEST_STD_VER > 17 && defined(__cpp_char8_t) && defined(_LIBCPP_VERSION) && !defined(TEST_HAS_NO_LOCALIZATION) 546be11e35SMartin Storsjö const char8_t* u8In1 = u8"abcd/efg"; 556be11e35SMartin Storsjö const std::u8string u8In2(u8In1); 566be11e35SMartin Storsjö const auto u8In3 = u8In2.begin(); 576be11e35SMartin Storsjö const auto u8In3End = u8In2.end(); 586be11e35SMartin Storsjö // Proposed in P1423, marked tested only for libc++ 596be11e35SMartin Storsjö { 606be11e35SMartin Storsjö path p = fs::u8path(u8In1); 616be11e35SMartin Storsjö assert(p == In1); 626be11e35SMartin Storsjö } 636be11e35SMartin Storsjö { 646be11e35SMartin Storsjö path p = fs::u8path(u8In2); 656be11e35SMartin Storsjö assert(p == In1); 666be11e35SMartin Storsjö } 676be11e35SMartin Storsjö { 6812dd9cdfSArthur O'Dwyer path p = fs::u8path(u8In2.data()); 696be11e35SMartin Storsjö assert(p == In1); 706be11e35SMartin Storsjö } 716be11e35SMartin Storsjö { 726be11e35SMartin Storsjö path p = fs::u8path(u8In3, u8In3End); 736be11e35SMartin Storsjö assert(p == In1); 746be11e35SMartin Storsjö } 756be11e35SMartin Storsjö #endif 76f7b43230SLouis Dionne 77f7b43230SLouis Dionne return 0; 78f7b43230SLouis Dionne } 79