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
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

source code of libcxx/test/std/re/re.traits/translate_nocase.pass.cpp