summaryrefslogtreecommitdiff
path: root/libcxx/test/std/strings/c.strings/cwctype.pass.cpp
blob: 0deabf51ed59ccfea7f24e36e29b58602d626f6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// <cwctype>

// UNSUPPORTED: no-wide-characters

// towctrans and wctrans were added in Android API 26.
// TODO: Switch from UNSUPPORTED to XFAIL once the Android CI Docker sysroot is
// updated.
// UNSUPPORTED: LIBCXX-ANDROID-FIXME && target={{.+}}-android{{(eabi)?(21|22|23|24|25)}}

#include <cwctype>
#include <type_traits>

#include "test_macros.h"

#ifndef WEOF
#  error WEOF not defined
#endif

#ifdef iswalnum
#  error iswalnum defined
#endif

#ifdef iswalpha
#  error iswalpha defined
#endif

#ifdef iswblank
#  error iswblank defined
#endif

#ifdef iswcntrl
#  error iswcntrl defined
#endif

#ifdef iswdigit
#  error iswdigit defined
#endif

#ifdef iswgraph
#  error iswgraph defined
#endif

#ifdef iswlower
#  error iswlower defined
#endif

#ifdef iswprint
#  error iswprint defined
#endif

#ifdef iswpunct
#  error iswpunct defined
#endif

#ifdef iswspace
#  error iswspace defined
#endif

#ifdef iswupper
#  error iswupper defined
#endif

#ifdef iswxdigit
#  error iswxdigit defined
#endif

#ifdef iswctype
#  error iswctype defined
#endif

#ifdef wctype
#  error wctype defined
#endif

#ifdef towlower
#  error towlower defined
#endif

#ifdef towupper
#  error towupper defined
#endif

#ifdef towctrans
#  error towctrans defined
#endif

#ifdef wctrans
#  error wctrans defined
#endif

int main(int, char**) {
  std::wint_t w = 0;
  ASSERT_SAME_TYPE(int, decltype(std::iswalnum(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswalpha(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswblank(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswcntrl(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswdigit(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswgraph(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswlower(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswprint(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswpunct(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswspace(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswupper(w)));
  ASSERT_SAME_TYPE(int, decltype(std::iswxdigit(w)));

  ASSERT_SAME_TYPE(int, decltype(std::iswctype(w, std::wctype_t())));

  ASSERT_SAME_TYPE(std::wctype_t, decltype(std::wctype("")));
  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towlower(w)));
  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towupper(w)));
  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towctrans(w, std::wctrans_t())));
  ASSERT_SAME_TYPE(std::wctrans_t, decltype(std::wctrans("")));

  return 0;
}