1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <locale>
11
12 // template <class charT> class ctype_byname;
13
14 // bool is(mask m, charT c) const;
15
16 #include <locale>
17 #include <type_traits>
18 #include <cassert>
19
20 #include "platform_support.h" // locale name macros
21
main()22 int main()
23 {
24 {
25 std::locale l(LOCALE_en_US_UTF_8);
26 {
27 typedef std::ctype<wchar_t> F;
28 const F& f = std::use_facet<F>(l);
29
30 assert(f.is(F::space, L' '));
31 assert(!f.is(F::space, L'A'));
32
33 assert(f.is(F::print, L' '));
34 assert(!f.is(F::print, L'\x07'));
35
36 assert(f.is(F::cntrl, L'\x07'));
37 assert(!f.is(F::cntrl, L' '));
38
39 assert(f.is(F::upper, L'A'));
40 assert(!f.is(F::upper, L'a'));
41
42 assert(f.is(F::lower, L'a'));
43 assert(!f.is(F::lower, L'A'));
44
45 assert(f.is(F::alpha, L'a'));
46 assert(!f.is(F::alpha, L'1'));
47
48 assert(f.is(F::digit, L'1'));
49 assert(!f.is(F::digit, L'a'));
50
51 assert(f.is(F::punct, L'.'));
52 assert(!f.is(F::punct, L'a'));
53
54 assert(f.is(F::xdigit, L'a'));
55 assert(!f.is(F::xdigit, L'g'));
56
57 assert(f.is(F::alnum, L'a'));
58 assert(!f.is(F::alnum, L'.'));
59
60 assert(f.is(F::graph, L'.'));
61 assert(!f.is(F::graph, L'\x07'));
62
63 assert(f.is(F::alpha, L'\x00DA'));
64 assert(f.is(F::upper, L'\x00DA'));
65 }
66 }
67 {
68 std::locale l("C");
69 {
70 typedef std::ctype<wchar_t> F;
71 const F& f = std::use_facet<F>(l);
72
73 assert(f.is(F::space, L' '));
74 assert(!f.is(F::space, L'A'));
75
76 assert(f.is(F::print, L' '));
77 assert(!f.is(F::print, L'\x07'));
78
79 assert(f.is(F::cntrl, L'\x07'));
80 assert(!f.is(F::cntrl, L' '));
81
82 assert(f.is(F::upper, L'A'));
83 assert(!f.is(F::upper, L'a'));
84
85 assert(f.is(F::lower, L'a'));
86 assert(!f.is(F::lower, L'A'));
87
88 assert(f.is(F::alpha, L'a'));
89 assert(!f.is(F::alpha, L'1'));
90
91 assert(f.is(F::digit, L'1'));
92 assert(!f.is(F::digit, L'a'));
93
94 assert(f.is(F::punct, L'.'));
95 assert(!f.is(F::punct, L'a'));
96
97 assert(f.is(F::xdigit, L'a'));
98 assert(!f.is(F::xdigit, L'g'));
99
100 assert(f.is(F::alnum, L'a'));
101 assert(!f.is(F::alnum, L'.'));
102
103 assert(f.is(F::graph, L'.'));
104 assert(!f.is(F::graph, L'\x07'));
105
106 assert(!f.is(F::alpha, L'\x00DA'));
107 assert(!f.is(F::upper, L'\x00DA'));
108 }
109 }
110 }
111