is_many.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===// 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// The LLVM Compiler Infrastructure 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This file is dual licensed under the MIT and the University of Illinois Open 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Source Licenses. See LICENSE.TXT for details. 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===// 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// <locale> 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// template <class charT> class ctype_byname; 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// const charT* do_is(const charT* low, const charT* high, mask* vec) const; 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <locale> 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <string> 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <vector> 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <cassert> 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <stdio.h> 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverint main() 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver std::locale l("en_US"); 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typedef std::ctype<wchar_t> F; 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const F& f = std::use_facet<F>(l); 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::wstring in(L"\x00DA A\x07.a1"); 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver std::vector<F::mask> m(in.size()); 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data()); 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(h == in.data() + in.size()); 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // L'\x00DA' 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::space)); 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[0] & F::print)); 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::cntrl)); 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[0] & F::upper)); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::lower)); 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[0] & F::alpha)); 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::digit)); 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::punct)); 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::xdigit)); 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[0] & F::blank)); 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[0] & F::alnum)); 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[0] & F::graph)); 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // L' ' 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[1] & F::space)); 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[1] & F::print)); 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::cntrl)); 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::upper)); 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::lower)); 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::alpha)); 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::digit)); 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::punct)); 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::xdigit)); 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[1] & F::blank)); 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::alnum)); 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[1] & F::graph)); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // L'A' 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::space)); 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::print)); 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::cntrl)); 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::upper)); 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::lower)); 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::alpha)); 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::digit)); 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::punct)); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::xdigit)); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[2] & F::blank)); 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::alnum)); 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[2] & F::graph)); 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // L'\x07' 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[3] & F::space)); 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[3] & F::print)); 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( (m[3] & F::cntrl)); 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[3] & F::upper)); 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert(!(m[3] & F::lower)); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 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