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 10c352fa74SLouis Dionne // UNSUPPORTED: availability-filesystem-missing 11f7b43230SLouis Dionne 1288ffc727SLouis Dionne // These tests require locale for non-char paths 13a7f9895cSLouis Dionne // UNSUPPORTED: no-localization 1488ffc727SLouis Dionne 15f7b43230SLouis Dionne // <filesystem> 16f7b43230SLouis Dionne 17f7b43230SLouis Dionne // class path 18f7b43230SLouis Dionne 19f7b43230SLouis Dionne // std::string string() const; 20f7b43230SLouis Dionne // std::wstring wstring() const; 21f7b43230SLouis Dionne // std::u8string u8string() const; 22f7b43230SLouis Dionne // std::u16string u16string() const; 23f7b43230SLouis Dionne // std::u32string u32string() const; 24f7b43230SLouis Dionne 25*ac8c9f1eSLouis Dionne #include <filesystem> 26f7b43230SLouis Dionne #include <cassert> 27c352fa74SLouis Dionne #include <string> 28c352fa74SLouis Dionne #include <type_traits> 29f7b43230SLouis Dionne 30c352fa74SLouis Dionne #include "assert_macros.h" 31cc89063bSNico Weber #include "count_new.h" 32c352fa74SLouis Dionne #include "make_string.h" 33f7b43230SLouis Dionne #include "min_allocator.h" 34c352fa74SLouis Dionne #include "test_iterators.h" 35c352fa74SLouis Dionne #include "test_macros.h" 36*ac8c9f1eSLouis Dionne namespace fs = std::filesystem; 37f7b43230SLouis Dionne 38f7b43230SLouis Dionne MultiStringType longString = MKSTR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/123456789/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); 39f7b43230SLouis Dionne main(int,char **)40f7b43230SLouis Dionneint main(int, char**) 41f7b43230SLouis Dionne { 42f7b43230SLouis Dionne using namespace fs; 43f7b43230SLouis Dionne auto const& MS = longString; 44f7b43230SLouis Dionne const char* value = longString; 45f7b43230SLouis Dionne const path p(value); 46f7b43230SLouis Dionne { 47f7b43230SLouis Dionne std::string s = p.string(); 48f7b43230SLouis Dionne assert(s == value); 49f7b43230SLouis Dionne } 50f7b43230SLouis Dionne { 516be11e35SMartin Storsjö #if TEST_STD_VER > 17 && defined(__cpp_char8_t) 526be11e35SMartin Storsjö ASSERT_SAME_TYPE(decltype(p.u8string()), std::u8string); 536be11e35SMartin Storsjö std::u8string s = p.u8string(); 546be11e35SMartin Storsjö assert(s == (const char8_t*)MS); 556be11e35SMartin Storsjö #else 566be11e35SMartin Storsjö ASSERT_SAME_TYPE(decltype(p.u8string()), std::string); 57f7b43230SLouis Dionne std::string s = p.u8string(); 58f7b43230SLouis Dionne assert(s == (const char*)MS); 596be11e35SMartin Storsjö #endif 60f7b43230SLouis Dionne } 61f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 62f7b43230SLouis Dionne { 63f7b43230SLouis Dionne std::wstring s = p.wstring(); 64f7b43230SLouis Dionne assert(s == (const wchar_t*)MS); 65f7b43230SLouis Dionne } 66f4c1258dSLouis Dionne #endif 67f7b43230SLouis Dionne { 68f7b43230SLouis Dionne std::u16string s = p.u16string(); 69f7b43230SLouis Dionne assert(s == (const char16_t*)MS); 70f7b43230SLouis Dionne } 71f7b43230SLouis Dionne { 72f7b43230SLouis Dionne std::u32string s = p.u32string(); 73f7b43230SLouis Dionne assert(s == (const char32_t*)MS); 74f7b43230SLouis Dionne } 75f7b43230SLouis Dionne 76f7b43230SLouis Dionne return 0; 77f7b43230SLouis Dionne } 78