is_1.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
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
22int 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