1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <regex> 10 11 // template <class charT> struct regex_traits; 12 13 // charT translate_nocase(charT c) const; 14 15 // REQUIRES: locale.en_US.UTF-8 16 // XFAIL: win32-broken-utf8-wchar-ctype 17 18 // Prior to Android O (API 26), in the "en_US.UTF-8" locale, towlower(L'\xDA') 19 // returned 0xDA instead of 0xFA. 20 // XFAIL: LIBCXX-ANDROID-FIXME && android-device-api={{21|22|23|24|25}} 21 22 #include <regex> 23 #include <cassert> 24 25 #include "test_macros.h" 26 #include "platform_support.h" 27 main(int,char **)28int main(int, char**) 29 { 30 { 31 std::regex_traits<char> t; 32 assert(t.translate_nocase(' ') == ' '); 33 assert(t.translate_nocase('A') == 'a'); 34 assert(t.translate_nocase('\x07') == '\x07'); 35 assert(t.translate_nocase('.') == '.'); 36 assert(t.translate_nocase('a') == 'a'); 37 assert(t.translate_nocase('1') == '1'); 38 assert(t.translate_nocase('\xDA') == '\xDA'); 39 assert(t.translate_nocase('\xFA') == '\xFA'); 40 t.imbue(std::locale(LOCALE_en_US_UTF_8)); 41 assert(t.translate_nocase(' ') == ' '); 42 assert(t.translate_nocase('A') == 'a'); 43 assert(t.translate_nocase('\x07') == '\x07'); 44 assert(t.translate_nocase('.') == '.'); 45 assert(t.translate_nocase('a') == 'a'); 46 assert(t.translate_nocase('1') == '1'); 47 } 48 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 49 { 50 std::regex_traits<wchar_t> t; 51 assert(t.translate_nocase(L' ') == L' '); 52 assert(t.translate_nocase(L'A') == L'a'); 53 assert(t.translate_nocase(L'\x07') == L'\x07'); 54 assert(t.translate_nocase(L'.') == L'.'); 55 assert(t.translate_nocase(L'a') == L'a'); 56 assert(t.translate_nocase(L'1') == L'1'); 57 assert(t.translate_nocase(L'\xDA') == L'\xDA'); 58 assert(t.translate_nocase(L'\xFA') == L'\xFA'); 59 t.imbue(std::locale(LOCALE_en_US_UTF_8)); 60 assert(t.translate_nocase(L' ') == L' '); 61 assert(t.translate_nocase(L'A') == L'a'); 62 assert(t.translate_nocase(L'\x07') == L'\x07'); 63 assert(t.translate_nocase(L'.') == L'.'); 64 assert(t.translate_nocase(L'a') == L'a'); 65 assert(t.translate_nocase(L'1') == L'1'); 66 assert(t.translate_nocase(L'\xDA') == L'\xFA'); 67 assert(t.translate_nocase(L'\xFA') == L'\xFA'); 68 } 69 #endif 70 71 return 0; 72 } 73