1 // Copyright (C) 2017-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-do run { target c++11 } } 19 20 #include <codecvt> 21 #include <testsuite_hooks.h> 22 23 const int bomlen = 2; // UTF-16 BOM is 16 bits 24 25 void test01()26test01() 27 { 28 const int maxlen = 2; 29 30 std::codecvt_utf16<char16_t> c; 31 VERIFY( c.always_noconv() == false ); 32 VERIFY( c.encoding() == 0 ); 33 VERIFY( c.max_length() == maxlen ); 34 35 std::codecvt_utf16<char16_t, 0x10ffff, std::consume_header> c_bom; 36 VERIFY( c_bom.always_noconv() == false ); 37 VERIFY( c_bom.encoding() == 0 ); 38 VERIFY( c_bom.max_length() == (maxlen + bomlen) ); 39 } 40 41 void test02()42test02() 43 { 44 const int maxlen = 4; 45 46 std::codecvt_utf16<char32_t> c; 47 VERIFY( c.always_noconv() == false ); 48 VERIFY( c.encoding() == 0 ); 49 VERIFY( c.max_length() == maxlen ); 50 51 std::codecvt_utf16<char32_t, 0x10ffff, std::consume_header> c_bom; 52 VERIFY( c_bom.always_noconv() == false ); 53 VERIFY( c_bom.encoding() == 0 ); 54 VERIFY( c_bom.max_length() == (maxlen + bomlen) ); 55 } 56 57 void test03()58test03() 59 { 60 #ifdef _GLIBCXX_USE_WCHAR_T 61 const int maxlen = sizeof(wchar_t) == 4 ? 4 : 2; 62 63 std::codecvt_utf16<wchar_t> c; 64 VERIFY( c.always_noconv() == false ); 65 VERIFY( c.encoding() == 0 ); 66 VERIFY( c.max_length() == maxlen ); 67 68 std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header> c_bom; 69 VERIFY( c_bom.always_noconv() == false ); 70 VERIFY( c_bom.encoding() == 0 ); 71 VERIFY( c_bom.max_length() == (maxlen + bomlen) ); 72 #endif 73 } 74 75 int main()76main() 77 { 78 test01(); 79 test02(); 80 test03(); 81 } 82