1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // REQUIRES: locale.zh_CN.UTF-8
14 // class money_get<charT, InputIterator>
16 // iter_type get(iter_type b, iter_type e, bool intl, ios_base& iob,
17 // ios_base::iostate& err, long double& v) const;
23 #include "test_iterators.h"
25 #include "platform_support.h" // locale name macros
27 typedef std::money_get<char, input_iterator<const char*> > Fn;
33 explicit my_facet(std::size_t refs = 0)
37 typedef std::money_get<wchar_t, input_iterator<const wchar_t*> > Fw;
43 explicit my_facetw(std::size_t refs = 0)
50 std::string loc_name(LOCALE_zh_CN_UTF_8);
51 ios.imbue(std::locale(ios.getloc(),
52 new std::moneypunct_byname<char, false>(loc_name)));
53 ios.imbue(std::locale(ios.getloc(),
54 new std::moneypunct_byname<char, true>(loc_name)));
55 ios.imbue(std::locale(ios.getloc(),
56 new std::moneypunct_byname<wchar_t, false>(loc_name)));
57 ios.imbue(std::locale(ios.getloc(),
58 new std::moneypunct_byname<wchar_t, true>(loc_name)));
63 std::string v = "0.00";
64 typedef input_iterator<const char*> I;
66 std::ios_base::iostate err = std::ios_base::goodbit;
67 I iter = f.get(I(v.data()), I(v.data() + v.size()),
69 assert(iter.base() == v.data() + v.size());
70 assert(err == std::ios_base::eofbit);
74 std::string v = "-0.01";
75 typedef input_iterator<const char*> I;
77 std::ios_base::iostate err = std::ios_base::goodbit;
78 I iter = f.get(I(v.data()), I(v.data() + v.size()),
80 assert(iter.base() == v.data() + v.size());
81 assert(err == std::ios_base::eofbit);
85 std::string v = "1,234,567.89";
86 typedef input_iterator<const char*> I;
88 std::ios_base::iostate err = std::ios_base::goodbit;
89 I iter = f.get(I(v.data()), I(v.data() + v.size()),
91 assert(iter.base() == v.data() + v.size());
92 assert(err == std::ios_base::eofbit);
93 assert(ex == 123456789);
96 std::string v = "-1,234,567.89";
97 typedef input_iterator<const char*> I;
99 std::ios_base::iostate err = std::ios_base::goodbit;
100 I iter = f.get(I(v.data()), I(v.data() + v.size()),
101 false, ios, err, ex);
102 assert(iter.base() == v.data() + v.size());
103 assert(err == std::ios_base::eofbit);
104 assert(ex == -123456789);
107 std::string v = "-1234567.89";
108 typedef input_iterator<const char*> I;
110 std::ios_base::iostate err = std::ios_base::goodbit;
111 I iter = f.get(I(v.data()), I(v.data() + v.size()),
112 false, ios, err, ex);
113 assert(iter.base() == v.data() + v.size());
114 assert(err == std::ios_base::eofbit);
115 assert(ex == -123456789);
118 std::string v = "\xEF\xBF\xA5""0.00";
119 typedef input_iterator<const char*> I;
121 std::ios_base::iostate err = std::ios_base::goodbit;
122 I iter = f.get(I(v.data()), I(v.data() + v.size()),
123 false, ios, err, ex);
124 assert(iter.base() == v.data() + v.size());
125 assert(err == std::ios_base::eofbit);
129 std::string v = "\xEF\xBF\xA5""0.00";
131 typedef input_iterator<const char*> I;
133 std::ios_base::iostate err = std::ios_base::goodbit;
134 I iter = f.get(I(v.data()), I(v.data() + v.size()),
135 false, ios, err, ex);
136 assert(iter.base() == v.data() + v.size());
137 assert(err == std::ios_base::eofbit);
141 { // negative one, showbase
142 std::string v = "\xEF\xBF\xA5""-0.01";
143 typedef input_iterator<const char*> I;
145 std::ios_base::iostate err = std::ios_base::goodbit;
146 I iter = f.get(I(v.data()), I(v.data() + v.size()),
147 false, ios, err, ex);
148 assert(iter.base() == v.data() + v.size());
149 assert(err == std::ios_base::eofbit);
152 { // negative one, showbase
153 std::string v = "\xEF\xBF\xA5""-0.01";
155 typedef input_iterator<const char*> I;
157 std::ios_base::iostate err = std::ios_base::goodbit;
158 I iter = f.get(I(v.data()), I(v.data() + v.size()),
159 false, ios, err, ex);
160 assert(iter.base() == v.data() + v.size());
161 assert(err == std::ios_base::eofbit);
165 { // positive, showbase
166 std::string v = "\xEF\xBF\xA5""1,234,567.89";
167 typedef input_iterator<const char*> I;
169 std::ios_base::iostate err = std::ios_base::goodbit;
170 I iter = f.get(I(v.data()), I(v.data() + v.size()),
171 false, ios, err, ex);
172 assert(iter.base() == v.data() + v.size());
173 assert(err == std::ios_base::eofbit);
174 assert(ex == 123456789);
176 { // positive, showbase
177 std::string v = "\xEF\xBF\xA5""1,234,567.89";
179 typedef input_iterator<const char*> I;
181 std::ios_base::iostate err = std::ios_base::goodbit;
182 I iter = f.get(I(v.data()), I(v.data() + v.size()),
183 false, ios, err, ex);
184 assert(iter.base() == v.data() + v.size());
185 assert(err == std::ios_base::eofbit);
186 assert(ex == 123456789);
189 { // negative, showbase
190 std::string v = "\xEF\xBF\xA5""-1,234,567.89";
192 typedef input_iterator<const char*> I;
194 std::ios_base::iostate err = std::ios_base::goodbit;
195 I iter = f.get(I(v.data()), I(v.data() + v.size()),
196 false, ios, err, ex);
197 assert(iter.base() == v.data() + v.size());
198 assert(err == std::ios_base::eofbit);
199 assert(ex == -123456789);
202 { // negative, showbase
203 std::string v = "CNY -1,234,567.89";
205 typedef input_iterator<const char*> I;
207 std::ios_base::iostate err = std::ios_base::goodbit;
208 I iter = f.get(I(v.data()), I(v.data() + v.size()),
209 false, ios, err, ex);
210 assert(iter.base() == v.data() + 0);
211 assert(err == std::ios_base::failbit);
214 { // negative, showbase
215 std::string v = "CNY -1,234,567.89";
216 typedef input_iterator<const char*> I;
218 std::ios_base::iostate err = std::ios_base::goodbit;
219 I iter = f.get(I(v.data()), I(v.data() + v.size()),
220 false, ios, err, ex);
221 assert(iter.base() == v.data() + 0);
222 assert(err == std::ios_base::failbit);
227 // char, international
229 std::string v = "0.00";
230 typedef input_iterator<const char*> I;
232 std::ios_base::iostate err = std::ios_base::goodbit;
233 I iter = f.get(I(v.data()), I(v.data() + v.size()),
235 assert(iter.base() == v.data() + v.size());
236 assert(err == std::ios_base::eofbit);
240 std::string v = "-0.01";
241 typedef input_iterator<const char*> I;
243 std::ios_base::iostate err = std::ios_base::goodbit;
244 I iter = f.get(I(v.data()), I(v.data() + v.size()),
246 assert(iter.base() == v.data() + v.size());
247 assert(err == std::ios_base::eofbit);
251 std::string v = "1,234,567.89";
252 typedef input_iterator<const char*> I;
254 std::ios_base::iostate err = std::ios_base::goodbit;
255 I iter = f.get(I(v.data()), I(v.data() + v.size()),
257 assert(iter.base() == v.data() + v.size());
258 assert(err == std::ios_base::eofbit);
259 assert(ex == 123456789);
262 std::string v = "-1,234,567.89";
263 typedef input_iterator<const char*> I;
265 std::ios_base::iostate err = std::ios_base::goodbit;
266 I iter = f.get(I(v.data()), I(v.data() + v.size()),
268 assert(iter.base() == v.data() + v.size());
269 assert(err == std::ios_base::eofbit);
270 assert(ex == -123456789);
273 std::string v = "-1234567.89";
274 typedef input_iterator<const char*> I;
276 std::ios_base::iostate err = std::ios_base::goodbit;
277 I iter = f.get(I(v.data()), I(v.data() + v.size()),
279 assert(iter.base() == v.data() + v.size());
280 assert(err == std::ios_base::eofbit);
281 assert(ex == -123456789);
284 std::string v = "CNY 0.00";
285 typedef input_iterator<const char*> I;
287 std::ios_base::iostate err = std::ios_base::goodbit;
288 I iter = f.get(I(v.data()), I(v.data() + v.size()),
290 assert(iter.base() == v.data() + v.size());
291 assert(err == std::ios_base::eofbit);
295 std::string v = "CNY 0.00";
297 typedef input_iterator<const char*> I;
299 std::ios_base::iostate err = std::ios_base::goodbit;
300 I iter = f.get(I(v.data()), I(v.data() + v.size()),
302 assert(iter.base() == v.data() + v.size());
303 assert(err == std::ios_base::eofbit);
307 { // negative one, showbase
308 std::string v = "CNY -0.01";
309 typedef input_iterator<const char*> I;
311 std::ios_base::iostate err = std::ios_base::goodbit;
312 I iter = f.get(I(v.data()), I(v.data() + v.size()),
314 assert(iter.base() == v.data() + v.size());
315 assert(err == std::ios_base::eofbit);
318 { // negative one, showbase
319 std::string v = "CNY -0.01";
321 typedef input_iterator<const char*> I;
323 std::ios_base::iostate err = std::ios_base::goodbit;
324 I iter = f.get(I(v.data()), I(v.data() + v.size()),
326 assert(iter.base() == v.data() + v.size());
327 assert(err == std::ios_base::eofbit);
331 { // positive, showbase
332 std::string v = "CNY 1,234,567.89";
333 typedef input_iterator<const char*> I;
335 std::ios_base::iostate err = std::ios_base::goodbit;
336 I iter = f.get(I(v.data()), I(v.data() + v.size()),
338 assert(iter.base() == v.data() + v.size());
339 assert(err == std::ios_base::eofbit);
340 assert(ex == 123456789);
342 { // positive, showbase
343 std::string v = "CNY 1,234,567.89";
345 typedef input_iterator<const char*> I;
347 std::ios_base::iostate err = std::ios_base::goodbit;
348 I iter = f.get(I(v.data()), I(v.data() + v.size()),
350 assert(iter.base() == v.data() + v.size());
351 assert(err == std::ios_base::eofbit);
352 assert(ex == 123456789);
355 { // negative, showbase
356 std::string v = "CNY -1,234,567.89";
358 typedef input_iterator<const char*> I;
360 std::ios_base::iostate err = std::ios_base::goodbit;
361 I iter = f.get(I(v.data()), I(v.data() + v.size()),
363 assert(iter.base() == v.data() + v.size());
364 assert(err == std::ios_base::eofbit);
365 assert(ex == -123456789);
368 { // negative, showbase
369 std::string v = "\xEF\xBF\xA5""-1,234,567.89";
371 typedef input_iterator<const char*> I;
373 std::ios_base::iostate err = std::ios_base::goodbit;
374 I iter = f.get(I(v.data()), I(v.data() + v.size()),
376 assert(iter.base() == v.data() + 0);
377 assert(err == std::ios_base::failbit);
380 { // negative, showbase
381 std::string v = "\xEF\xBF\xA5""-1,234,567.89";
382 typedef input_iterator<const char*> I;
384 std::ios_base::iostate err = std::ios_base::goodbit;
385 I iter = f.get(I(v.data()), I(v.data() + v.size()),
387 assert(iter.base() == v.data() + 0);
388 assert(err == std::ios_base::failbit);
392 const my_facetw f(1);
395 std::wstring v = L"0.00";
396 typedef input_iterator<const wchar_t*> I;
398 std::ios_base::iostate err = std::ios_base::goodbit;
399 I iter = f.get(I(v.data()), I(v.data() + v.size()),
400 false, ios, err, ex);
401 assert(iter.base() == v.data() + v.size());
402 assert(err == std::ios_base::eofbit);
406 std::wstring v = L"-0.01";
407 typedef input_iterator<const wchar_t*> I;
409 std::ios_base::iostate err = std::ios_base::goodbit;
410 I iter = f.get(I(v.data()), I(v.data() + v.size()),
411 false, ios, err, ex);
412 assert(iter.base() == v.data() + v.size());
413 assert(err == std::ios_base::eofbit);
417 std::wstring v = L"1,234,567.89";
418 typedef input_iterator<const wchar_t*> I;
420 std::ios_base::iostate err = std::ios_base::goodbit;
421 I iter = f.get(I(v.data()), I(v.data() + v.size()),
422 false, ios, err, ex);
423 assert(iter.base() == v.data() + v.size());
424 assert(err == std::ios_base::eofbit);
425 assert(ex == 123456789);
428 std::wstring v = L"-1,234,567.89";
429 typedef input_iterator<const wchar_t*> I;
431 std::ios_base::iostate err = std::ios_base::goodbit;
432 I iter = f.get(I(v.data()), I(v.data() + v.size()),
433 false, ios, err, ex);
434 assert(iter.base() == v.data() + v.size());
435 assert(err == std::ios_base::eofbit);
436 assert(ex == -123456789);
439 std::wstring v = L"-1234567.89";
440 typedef input_iterator<const wchar_t*> I;
442 std::ios_base::iostate err = std::ios_base::goodbit;
443 I iter = f.get(I(v.data()), I(v.data() + v.size()),
444 false, ios, err, ex);
445 assert(iter.base() == v.data() + v.size());
446 assert(err == std::ios_base::eofbit);
447 assert(ex == -123456789);
450 std::wstring v = L"\xFFE5""0.00";
451 typedef input_iterator<const wchar_t*> I;
453 std::ios_base::iostate err = std::ios_base::goodbit;
454 I iter = f.get(I(v.data()), I(v.data() + v.size()),
455 false, ios, err, ex);
456 assert(iter.base() == v.data() + v.size());
457 assert(err == std::ios_base::eofbit);
461 std::wstring v = L"\xFFE5""0.00";
463 typedef input_iterator<const wchar_t*> I;
465 std::ios_base::iostate err = std::ios_base::goodbit;
466 I iter = f.get(I(v.data()), I(v.data() + v.size()),
467 false, ios, err, ex);
468 assert(iter.base() == v.data() + v.size());
469 assert(err == std::ios_base::eofbit);
473 { // negative one, showbase
474 std::wstring v = L"\xFFE5""-0.01";
475 typedef input_iterator<const wchar_t*> I;
477 std::ios_base::iostate err = std::ios_base::goodbit;
478 I iter = f.get(I(v.data()), I(v.data() + v.size()),
479 false, ios, err, ex);
480 assert(iter.base() == v.data() + v.size());
481 assert(err == std::ios_base::eofbit);
484 { // negative one, showbase
485 std::wstring v = L"\xFFE5""-0.01";
487 typedef input_iterator<const wchar_t*> I;
489 std::ios_base::iostate err = std::ios_base::goodbit;
490 I iter = f.get(I(v.data()), I(v.data() + v.size()),
491 false, ios, err, ex);
492 assert(iter.base() == v.data() + v.size());
493 assert(err == std::ios_base::eofbit);
497 { // positive, showbase
498 std::wstring v = L"\xFFE5""1,234,567.89";
499 typedef input_iterator<const wchar_t*> I;
501 std::ios_base::iostate err = std::ios_base::goodbit;
502 I iter = f.get(I(v.data()), I(v.data() + v.size()),
503 false, ios, err, ex);
504 assert(iter.base() == v.data() + v.size());
505 assert(err == std::ios_base::eofbit);
506 assert(ex == 123456789);
508 { // positive, showbase
509 std::wstring v = L"\xFFE5""1,234,567.89";
511 typedef input_iterator<const wchar_t*> I;
513 std::ios_base::iostate err = std::ios_base::goodbit;
514 I iter = f.get(I(v.data()), I(v.data() + v.size()),
515 false, ios, err, ex);
516 assert(iter.base() == v.data() + v.size());
517 assert(err == std::ios_base::eofbit);
518 assert(ex == 123456789);
521 { // negative, showbase
522 std::wstring v = L"\xFFE5""-1,234,567.89";
524 typedef input_iterator<const wchar_t*> I;
526 std::ios_base::iostate err = std::ios_base::goodbit;
527 I iter = f.get(I(v.data()), I(v.data() + v.size()),
528 false, ios, err, ex);
529 assert(iter.base() == v.data() + v.size());
530 assert(err == std::ios_base::eofbit);
531 assert(ex == -123456789);
534 { // negative, showbase
535 std::wstring v = L"CNY -1,234,567.89";
537 typedef input_iterator<const wchar_t*> I;
539 std::ios_base::iostate err = std::ios_base::goodbit;
540 I iter = f.get(I(v.data()), I(v.data() + v.size()),
541 false, ios, err, ex);
542 assert(iter.base() == v.data() + 0);
543 assert(err == std::ios_base::failbit);
546 { // negative, showbase
547 std::wstring v = L"CNY -1,234,567.89";
548 typedef input_iterator<const wchar_t*> I;
550 std::ios_base::iostate err = std::ios_base::goodbit;
551 I iter = f.get(I(v.data()), I(v.data() + v.size()),
552 false, ios, err, ex);
553 assert(iter.base() == v.data() + 0);
554 assert(err == std::ios_base::failbit);
558 const my_facetw f(1);
559 // wchar_t, international
561 std::wstring v = L"0.00";
562 typedef input_iterator<const wchar_t*> I;
564 std::ios_base::iostate err = std::ios_base::goodbit;
565 I iter = f.get(I(v.data()), I(v.data() + v.size()),
567 assert(iter.base() == v.data() + v.size());
568 assert(err == std::ios_base::eofbit);
572 std::wstring v = L"-0.01";
573 typedef input_iterator<const wchar_t*> I;
575 std::ios_base::iostate err = std::ios_base::goodbit;
576 I iter = f.get(I(v.data()), I(v.data() + v.size()),
578 assert(iter.base() == v.data() + v.size());
579 assert(err == std::ios_base::eofbit);
583 std::wstring v = L"1,234,567.89";
584 typedef input_iterator<const wchar_t*> I;
586 std::ios_base::iostate err = std::ios_base::goodbit;
587 I iter = f.get(I(v.data()), I(v.data() + v.size()),
589 assert(iter.base() == v.data() + v.size());
590 assert(err == std::ios_base::eofbit);
591 assert(ex == 123456789);
594 std::wstring v = L"-1,234,567.89";
595 typedef input_iterator<const wchar_t*> I;
597 std::ios_base::iostate err = std::ios_base::goodbit;
598 I iter = f.get(I(v.data()), I(v.data() + v.size()),
600 assert(iter.base() == v.data() + v.size());
601 assert(err == std::ios_base::eofbit);
602 assert(ex == -123456789);
605 std::wstring v = L"-1234567.89";
606 typedef input_iterator<const wchar_t*> I;
608 std::ios_base::iostate err = std::ios_base::goodbit;
609 I iter = f.get(I(v.data()), I(v.data() + v.size()),
611 assert(iter.base() == v.data() + v.size());
612 assert(err == std::ios_base::eofbit);
613 assert(ex == -123456789);
616 std::wstring v = L"CNY 0.00";
617 typedef input_iterator<const wchar_t*> I;
619 std::ios_base::iostate err = std::ios_base::goodbit;
620 I iter = f.get(I(v.data()), I(v.data() + v.size()),
622 assert(iter.base() == v.data() + v.size());
623 assert(err == std::ios_base::eofbit);
627 std::wstring v = L"CNY 0.00";
629 typedef input_iterator<const wchar_t*> I;
631 std::ios_base::iostate err = std::ios_base::goodbit;
632 I iter = f.get(I(v.data()), I(v.data() + v.size()),
634 assert(iter.base() == v.data() + v.size());
635 assert(err == std::ios_base::eofbit);
639 { // negative one, showbase
640 std::wstring v = L"CNY -0.01";
641 typedef input_iterator<const wchar_t*> I;
643 std::ios_base::iostate err = std::ios_base::goodbit;
644 I iter = f.get(I(v.data()), I(v.data() + v.size()),
646 assert(iter.base() == v.data() + v.size());
647 assert(err == std::ios_base::eofbit);
650 { // negative one, showbase
651 std::wstring v = L"CNY -0.01";
653 typedef input_iterator<const wchar_t*> I;
655 std::ios_base::iostate err = std::ios_base::goodbit;
656 I iter = f.get(I(v.data()), I(v.data() + v.size()),
658 assert(iter.base() == v.data() + v.size());
659 assert(err == std::ios_base::eofbit);
663 { // positive, showbase
664 std::wstring v = L"CNY 1,234,567.89";
665 typedef input_iterator<const wchar_t*> I;
667 std::ios_base::iostate err = std::ios_base::goodbit;
668 I iter = f.get(I(v.data()), I(v.data() + v.size()),
670 assert(iter.base() == v.data() + v.size());
671 assert(err == std::ios_base::eofbit);
672 assert(ex == 123456789);
674 { // positive, showbase
675 std::wstring v = L"CNY 1,234,567.89";
677 typedef input_iterator<const wchar_t*> I;
679 std::ios_base::iostate err = std::ios_base::goodbit;
680 I iter = f.get(I(v.data()), I(v.data() + v.size()),
682 assert(iter.base() == v.data() + v.size());
683 assert(err == std::ios_base::eofbit);
684 assert(ex == 123456789);
687 { // negative, showbase
688 std::wstring v = L"CNY -1,234,567.89";
690 typedef input_iterator<const wchar_t*> I;
692 std::ios_base::iostate err = std::ios_base::goodbit;
693 I iter = f.get(I(v.data()), I(v.data() + v.size()),
695 assert(iter.base() == v.data() + v.size());
696 assert(err == std::ios_base::eofbit);
697 assert(ex == -123456789);
700 { // negative, showbase
701 std::wstring v = L"\xFFE5""-1,234,567.89";
703 typedef input_iterator<const wchar_t*> I;
705 std::ios_base::iostate err = std::ios_base::goodbit;
706 I iter = f.get(I(v.data()), I(v.data() + v.size()),
708 assert(iter.base() == v.data() + 0);
709 assert(err == std::ios_base::failbit);
712 { // negative, showbase
713 std::wstring v = L"\xFFE5""-1,234,567.89";
714 typedef input_iterator<const wchar_t*> I;
716 std::ios_base::iostate err = std::ios_base::goodbit;
717 I iter = f.get(I(v.data()), I(v.data() + v.size()),
719 assert(iter.base() == v.data() + 0);
720 assert(err == std::ios_base::failbit);