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// <cwctype>
10
11// UNSUPPORTED: no-wide-characters
12
13// towctrans and wctrans were added in Android API 26.
14// TODO: Switch from UNSUPPORTED to XFAIL once the Android CI Docker sysroot is
15// updated.
16// UNSUPPORTED: LIBCXX-ANDROID-FIXME && target={{.+}}-android{{(eabi)?(21|22|23|24|25)}}
17
18#include <cwctype>
19#include <type_traits>
20
21#include "test_macros.h"
22
23#ifndef WEOF
24# error WEOF not defined
25#endif
26
27#ifdef iswalnum
28# error iswalnum defined
29#endif
30
31#ifdef iswalpha
32# error iswalpha defined
33#endif
34
35#ifdef iswblank
36# error iswblank defined
37#endif
38
39#ifdef iswcntrl
40# error iswcntrl defined
41#endif
42
43#ifdef iswdigit
44# error iswdigit defined
45#endif
46
47#ifdef iswgraph
48# error iswgraph defined
49#endif
50
51#ifdef iswlower
52# error iswlower defined
53#endif
54
55#ifdef iswprint
56# error iswprint defined
57#endif
58
59#ifdef iswpunct
60# error iswpunct defined
61#endif
62
63#ifdef iswspace
64# error iswspace defined
65#endif
66
67#ifdef iswupper
68# error iswupper defined
69#endif
70
71#ifdef iswxdigit
72# error iswxdigit defined
73#endif
74
75#ifdef iswctype
76# error iswctype defined
77#endif
78
79#ifdef wctype
80# error wctype defined
81#endif
82
83#ifdef towlower
84# error towlower defined
85#endif
86
87#ifdef towupper
88# error towupper defined
89#endif
90
91#ifdef towctrans
92# error towctrans defined
93#endif
94
95#ifdef wctrans
96# error wctrans defined
97#endif
98
99int main(int, char**) {
100 std::wint_t w = 0;
101 ASSERT_SAME_TYPE(int, decltype(std::iswalnum(w)));
102 ASSERT_SAME_TYPE(int, decltype(std::iswalpha(w)));
103 ASSERT_SAME_TYPE(int, decltype(std::iswblank(w)));
104 ASSERT_SAME_TYPE(int, decltype(std::iswcntrl(w)));
105 ASSERT_SAME_TYPE(int, decltype(std::iswdigit(w)));
106 ASSERT_SAME_TYPE(int, decltype(std::iswgraph(w)));
107 ASSERT_SAME_TYPE(int, decltype(std::iswlower(w)));
108 ASSERT_SAME_TYPE(int, decltype(std::iswprint(w)));
109 ASSERT_SAME_TYPE(int, decltype(std::iswpunct(w)));
110 ASSERT_SAME_TYPE(int, decltype(std::iswspace(w)));
111 ASSERT_SAME_TYPE(int, decltype(std::iswupper(w)));
112 ASSERT_SAME_TYPE(int, decltype(std::iswxdigit(w)));
113
114 ASSERT_SAME_TYPE(int, decltype(std::iswctype(w, std::wctype_t())));
115
116 ASSERT_SAME_TYPE(std::wctype_t, decltype(std::wctype("")));
117 ASSERT_SAME_TYPE(std::wint_t, decltype(std::towlower(w)));
118 ASSERT_SAME_TYPE(std::wint_t, decltype(std::towupper(w)));
119 ASSERT_SAME_TYPE(std::wint_t, decltype(std::towctrans(w, std::wctrans_t())));
120 ASSERT_SAME_TYPE(std::wctrans_t, decltype(std::wctrans("")));
121
122 return 0;
123}
124

source code of libcxx/test/std/strings/c.strings/cwctype.pass.cpp