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