1 // Copyright (C) 2016-2021 Free Software Foundation, Inc. 2 // 3 // This file is part of the GNU ISO C++ Library. This library is free 4 // software; you can redistribute it and/or modify it under the 5 // terms of the GNU General Public License as published by the 6 // Free Software Foundation; either version 3, or (at your option) 7 // any later version. 8 9 // This library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 14 // You should have received a copy of the GNU General Public License along 15 // with this library; see the file COPYING3. If not see 16 // <http://www.gnu.org/licenses/>. 17 18 // { dg-options "-fchar8_t" } 19 // { dg-do run { target c++17 } } 20 // { dg-require-filesystem-ts "" } 21 22 #include <filesystem> 23 #include <string> 24 #include <testsuite_hooks.h> 25 26 void test01()27test01() 28 { 29 using namespace std::filesystem; 30 using string_type = std::basic_string<path::value_type>; 31 const string_type s{ 'a', 'b', 'c' }; 32 path p(s); 33 34 VERIFY( p.native() == s ); 35 VERIFY( p.c_str() == s ); 36 VERIFY( static_cast<string_type>(p) == s ); 37 38 string_type s2 = p; // implicit conversion 39 VERIFY( s2 == p.native() ); 40 } 41 42 void test02()43test02() 44 { 45 using namespace std::filesystem; 46 const char* s = "abc"; 47 path p(s); 48 49 auto str = p.string<char>(); 50 VERIFY( str == "abc" ); 51 VERIFY( str == p.string() ); 52 53 auto strw = p.string<wchar_t>(); 54 VERIFY( strw == L"abc" ); 55 VERIFY( strw == p.wstring() ); 56 57 #ifdef _GLIBCXX_USE_CHAR8_T 58 auto str8 = p.string<char8_t>(); 59 VERIFY( str8 == u8"abc" ); 60 VERIFY( str8 == p.u8string() ); 61 #endif 62 63 auto str16 = p.string<char16_t>(); 64 VERIFY( str16 == u"abc" ); 65 VERIFY( str16 == p.u16string() ); 66 67 auto str32 = p.string<char32_t>(); 68 VERIFY( str32 == U"abc" ); 69 VERIFY( str32 == p.u32string() ); 70 } 71 72 int main()73main() 74 { 75 test01(); 76 test02(); 77 } 78