is_many.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <locale>
11
12// template <class charT> class ctype;
13
14// const charT* do_is(const charT* low, const charT* high, mask* vec) const;
15
16#include <locale>
17#include <string>
18#include <vector>
19#include <cassert>
20
21#include <stdio.h>
22
23int main()
24{
25    std::locale l = std::locale::classic();
26    {
27        typedef std::ctype<wchar_t> F;
28        const F& f = std::use_facet<F>(l);
29        const std::wstring in(L" A\x07.a1");
30        std::vector<F::mask> m(in.size());
31        const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
32        assert(h == in.data() + in.size());
33
34        // L' '
35        assert( (m[0] & F::space));
36        assert( (m[0] & F::print));
37        assert(!(m[0] & F::cntrl));
38        assert(!(m[0] & F::upper));
39        assert(!(m[0] & F::lower));
40        assert(!(m[0] & F::alpha));
41        assert(!(m[0] & F::digit));
42        assert(!(m[0] & F::punct));
43        assert(!(m[0] & F::xdigit));
44        assert( (m[0] & F::blank));
45        assert(!(m[0] & F::alnum));
46        assert(!(m[0] & F::graph));
47
48        // L'A'
49        assert(!(m[1] & F::space));
50        assert( (m[1] & F::print));
51        assert(!(m[1] & F::cntrl));
52        assert( (m[1] & F::upper));
53        assert(!(m[1] & F::lower));
54        assert( (m[1] & F::alpha));
55        assert(!(m[1] & F::digit));
56        assert(!(m[1] & F::punct));
57        assert( (m[1] & F::xdigit));
58        assert(!(m[1] & F::blank));
59        assert( (m[1] & F::alnum));
60        assert( (m[1] & F::graph));
61
62        // L'\x07'
63        assert(!(m[2] & F::space));
64        assert(!(m[2] & F::print));
65        assert( (m[2] & F::cntrl));
66        assert(!(m[2] & F::upper));
67        assert(!(m[2] & F::lower));
68        assert(!(m[2] & F::alpha));
69        assert(!(m[2] & F::digit));
70        assert(!(m[2] & F::punct));
71        assert(!(m[2] & F::xdigit));
72        assert(!(m[2] & F::blank));
73        assert(!(m[2] & F::alnum));
74        assert(!(m[2] & F::graph));
75
76        // L'.'
77        assert(!(m[3] & F::space));
78        assert( (m[3] & F::print));
79        assert(!(m[3] & F::cntrl));
80        assert(!(m[3] & F::upper));
81        assert(!(m[3] & F::lower));
82        assert(!(m[3] & F::alpha));
83        assert(!(m[3] & F::digit));
84        assert( (m[3] & F::punct));
85        assert(!(m[3] & F::xdigit));
86        assert(!(m[3] & F::blank));
87        assert(!(m[3] & F::alnum));
88        assert( (m[3] & F::graph));
89
90        // L'a'
91        assert(!(m[4] & F::space));
92        assert( (m[4] & F::print));
93        assert(!(m[4] & F::cntrl));
94        assert(!(m[4] & F::upper));
95        assert( (m[4] & F::lower));
96        assert( (m[4] & F::alpha));
97        assert(!(m[4] & F::digit));
98        assert(!(m[4] & F::punct));
99        assert( (m[4] & F::xdigit));
100        assert(!(m[4] & F::blank));
101        assert( (m[4] & F::alnum));
102        assert( (m[4] & F::graph));
103
104        // L'1'
105        assert(!(m[5] & F::space));
106        assert( (m[5] & F::print));
107        assert(!(m[5] & F::cntrl));
108        assert(!(m[5] & F::upper));
109        assert(!(m[5] & F::lower));
110        assert(!(m[5] & F::alpha));
111        assert( (m[5] & F::digit));
112        assert(!(m[5] & F::punct));
113        assert( (m[5] & F::xdigit));
114        assert(!(m[5] & F::blank));
115        assert( (m[5] & F::alnum));
116        assert( (m[5] & F::graph));
117    }
118}
119