xref: /llvm-project/libcxx/test/std/re/re.traits/translate_nocase.pass.cpp (revision bce3b505931cee9dc79d1c56c021983b4a8fb819)
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 **)28 int 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