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_byname; 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 { 26 std::locale l("en_US"); 27 { 28 typedef std::ctype<wchar_t> F; 29 const F& f = std::use_facet<F>(l); 30 const std::wstring in(L"\x00DA A\x07.a1"); 31 std::vector<F::mask> m(in.size()); 32 const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data()); 33 assert(h == in.data() + in.size()); 34 35 // L'\x00DA' 36 assert(!(m[0] & F::space)); 37 assert( (m[0] & F::print)); 38 assert(!(m[0] & F::cntrl)); 39 assert( (m[0] & F::upper)); 40 assert(!(m[0] & F::lower)); 41 assert( (m[0] & F::alpha)); 42 assert(!(m[0] & F::digit)); 43 assert(!(m[0] & F::punct)); 44 assert(!(m[0] & F::xdigit)); 45 assert(!(m[0] & F::blank)); 46 assert( (m[0] & F::alnum)); 47 assert( (m[0] & F::graph)); 48 49 // L' ' 50 assert( (m[1] & F::space)); 51 assert( (m[1] & F::print)); 52 assert(!(m[1] & F::cntrl)); 53 assert(!(m[1] & F::upper)); 54 assert(!(m[1] & F::lower)); 55 assert(!(m[1] & F::alpha)); 56 assert(!(m[1] & F::digit)); 57 assert(!(m[1] & F::punct)); 58 assert(!(m[1] & F::xdigit)); 59 assert( (m[1] & F::blank)); 60 assert(!(m[1] & F::alnum)); 61 assert(!(m[1] & F::graph)); 62 63 // L'A' 64 assert(!(m[2] & F::space)); 65 assert( (m[2] & F::print)); 66 assert(!(m[2] & F::cntrl)); 67 assert( (m[2] & F::upper)); 68 assert(!(m[2] & F::lower)); 69 assert( (m[2] & F::alpha)); 70 assert(!(m[2] & F::digit)); 71 assert(!(m[2] & F::punct)); 72 assert( (m[2] & F::xdigit)); 73 assert(!(m[2] & F::blank)); 74 assert( (m[2] & F::alnum)); 75 assert( (m[2] & F::graph)); 76 77 // L'\x07' 78 assert(!(m[3] & F::space)); 79 assert(!(m[3] & F::print)); 80 assert( (m[3] & F::cntrl)); 81 assert(!(m[3] & F::upper)); 82 assert(!(m[3] & F::lower)); 83 assert(!(m[3] & F::alpha)); 84 assert(!(m[3] & F::digit)); 85 assert(!(m[3] & F::punct)); 86 assert(!(m[3] & F::xdigit)); 87 assert(!(m[3] & F::blank)); 88 assert(!(m[3] & F::alnum)); 89 assert(!(m[3] & F::graph)); 90 91 // L'.' 92 assert(!(m[4] & F::space)); 93 assert( (m[4] & F::print)); 94 assert(!(m[4] & F::cntrl)); 95 assert(!(m[4] & F::upper)); 96 assert(!(m[4] & F::lower)); 97 assert(!(m[4] & F::alpha)); 98 assert(!(m[4] & F::digit)); 99 assert( (m[4] & F::punct)); 100 assert(!(m[4] & F::xdigit)); 101 assert(!(m[4] & F::blank)); 102 assert(!(m[4] & F::alnum)); 103 assert( (m[4] & F::graph)); 104 105 // L'a' 106 assert(!(m[5] & F::space)); 107 assert( (m[5] & F::print)); 108 assert(!(m[5] & F::cntrl)); 109 assert(!(m[5] & F::upper)); 110 assert( (m[5] & F::lower)); 111 assert( (m[5] & F::alpha)); 112 assert(!(m[5] & F::digit)); 113 assert(!(m[5] & F::punct)); 114 assert( (m[5] & F::xdigit)); 115 assert(!(m[5] & F::blank)); 116 assert( (m[5] & F::alnum)); 117 assert( (m[5] & F::graph)); 118 119 // L'1' 120 assert(!(m[6] & F::space)); 121 assert( (m[6] & F::print)); 122 assert(!(m[6] & F::cntrl)); 123 assert(!(m[6] & F::upper)); 124 assert(!(m[6] & F::lower)); 125 assert(!(m[6] & F::alpha)); 126 assert( (m[6] & F::digit)); 127 assert(!(m[6] & F::punct)); 128 assert( (m[6] & F::xdigit)); 129 assert(!(m[6] & F::blank)); 130 assert( (m[6] & F::alnum)); 131 assert( (m[6] & F::graph)); 132 } 133 } 134 { 135 std::locale l("C"); 136 { 137 typedef std::ctype<wchar_t> F; 138 const F& f = std::use_facet<F>(l); 139 const std::wstring in(L"\x00DA A\x07.a1"); 140 std::vector<F::mask> m(in.size()); 141 const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data()); 142 assert(h == in.data() + in.size()); 143 144 // L'\x00DA' 145 assert(!(m[0] & F::space)); 146 assert(!(m[0] & F::print)); 147 assert(!(m[0] & F::cntrl)); 148 assert(!(m[0] & F::upper)); 149 assert(!(m[0] & F::lower)); 150 assert(!(m[0] & F::alpha)); 151 assert(!(m[0] & F::digit)); 152 assert(!(m[0] & F::punct)); 153 assert(!(m[0] & F::xdigit)); 154 assert(!(m[0] & F::blank)); 155 assert(!(m[0] & F::alnum)); 156 assert(!(m[0] & F::graph)); 157 158 // L' ' 159 assert( (m[1] & F::space)); 160 assert( (m[1] & F::print)); 161 assert(!(m[1] & F::cntrl)); 162 assert(!(m[1] & F::upper)); 163 assert(!(m[1] & F::lower)); 164 assert(!(m[1] & F::alpha)); 165 assert(!(m[1] & F::digit)); 166 assert(!(m[1] & F::punct)); 167 assert(!(m[1] & F::xdigit)); 168 assert( (m[1] & F::blank)); 169 assert(!(m[1] & F::alnum)); 170 assert(!(m[1] & F::graph)); 171 172 // L'A' 173 assert(!(m[2] & F::space)); 174 assert( (m[2] & F::print)); 175 assert(!(m[2] & F::cntrl)); 176 assert( (m[2] & F::upper)); 177 assert(!(m[2] & F::lower)); 178 assert( (m[2] & F::alpha)); 179 assert(!(m[2] & F::digit)); 180 assert(!(m[2] & F::punct)); 181 assert( (m[2] & F::xdigit)); 182 assert(!(m[2] & F::blank)); 183 assert( (m[2] & F::alnum)); 184 assert( (m[2] & F::graph)); 185 186 // L'\x07' 187 assert(!(m[3] & F::space)); 188 assert(!(m[3] & F::print)); 189 assert( (m[3] & F::cntrl)); 190 assert(!(m[3] & F::upper)); 191 assert(!(m[3] & F::lower)); 192 assert(!(m[3] & F::alpha)); 193 assert(!(m[3] & F::digit)); 194 assert(!(m[3] & F::punct)); 195 assert(!(m[3] & F::xdigit)); 196 assert(!(m[3] & F::blank)); 197 assert(!(m[3] & F::alnum)); 198 assert(!(m[3] & F::graph)); 199 200 // L'.' 201 assert(!(m[4] & F::space)); 202 assert( (m[4] & F::print)); 203 assert(!(m[4] & F::cntrl)); 204 assert(!(m[4] & F::upper)); 205 assert(!(m[4] & F::lower)); 206 assert(!(m[4] & F::alpha)); 207 assert(!(m[4] & F::digit)); 208 assert( (m[4] & F::punct)); 209 assert(!(m[4] & F::xdigit)); 210 assert(!(m[4] & F::blank)); 211 assert(!(m[4] & F::alnum)); 212 assert( (m[4] & F::graph)); 213 214 // L'a' 215 assert(!(m[5] & F::space)); 216 assert( (m[5] & F::print)); 217 assert(!(m[5] & F::cntrl)); 218 assert(!(m[5] & F::upper)); 219 assert( (m[5] & F::lower)); 220 assert( (m[5] & F::alpha)); 221 assert(!(m[5] & F::digit)); 222 assert(!(m[5] & F::punct)); 223 assert( (m[5] & F::xdigit)); 224 assert(!(m[5] & F::blank)); 225 assert( (m[5] & F::alnum)); 226 assert( (m[5] & F::graph)); 227 228 // L'1' 229 assert(!(m[6] & F::space)); 230 assert( (m[6] & F::print)); 231 assert(!(m[6] & F::cntrl)); 232 assert(!(m[6] & F::upper)); 233 assert(!(m[6] & F::lower)); 234 assert(!(m[6] & F::alpha)); 235 assert( (m[6] & F::digit)); 236 assert(!(m[6] & F::punct)); 237 assert( (m[6] & F::xdigit)); 238 assert(!(m[6] & F::blank)); 239 assert( (m[6] & F::alnum)); 240 assert( (m[6] & F::graph)); 241 } 242 } 243} 244