get_long_double_fr_FR.pass.cpp revision 239e341c94184e2ed2357f2e054c84fbb1fbed2a
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// class money_get<charT, InputIterator>
13
14// iter_type get(iter_type b, iter_type e, bool intl, ios_base& iob,
15//               ios_base::iostate& err, long double& v) const;
16
17#include <locale>
18#include <ios>
19#include <streambuf>
20#include <cassert>
21#include "../../../../../iterators.h"
22
23#include "../../../../../platform_support.h" // locale name macros
24
25typedef std::money_get<char, input_iterator<const char*> > Fn;
26
27class my_facet
28    : public Fn
29{
30public:
31    explicit my_facet(std::size_t refs = 0)
32        : Fn(refs) {}
33};
34
35typedef std::money_get<wchar_t, input_iterator<const wchar_t*> > Fw;
36
37class my_facetw
38    : public Fw
39{
40public:
41    explicit my_facetw(std::size_t refs = 0)
42        : Fw(refs) {}
43};
44
45int main()
46{
47    std::ios ios(0);
48    std::string loc_name(LOCALE_fr_FR_UTF_8);
49    ios.imbue(std::locale(ios.getloc(),
50                          new std::moneypunct_byname<char, false>(loc_name)));
51    ios.imbue(std::locale(ios.getloc(),
52                          new std::moneypunct_byname<char, true>(loc_name)));
53    ios.imbue(std::locale(ios.getloc(),
54                          new std::moneypunct_byname<wchar_t, false>(loc_name)));
55    ios.imbue(std::locale(ios.getloc(),
56                          new std::moneypunct_byname<wchar_t, true>(loc_name)));
57    {
58        const my_facet f(1);
59        // char, national
60        {   // zero
61            std::string v = "0,00";
62            typedef input_iterator<const char*> I;
63            long double ex;
64            std::ios_base::iostate err = std::ios_base::goodbit;
65            I iter = f.get(I(v.data()), I(v.data() + v.size()),
66                                                false, ios, err, ex);
67            assert(iter.base() == v.data() + v.size());
68            assert(err == std::ios_base::eofbit);
69            assert(ex == 0);
70        }
71        {   // negative one
72            std::string v = "-0,01";
73            typedef input_iterator<const char*> I;
74            long double ex;
75            std::ios_base::iostate err = std::ios_base::goodbit;
76            I iter = f.get(I(v.data()), I(v.data() + v.size()),
77                                                false, ios, err, ex);
78            assert(iter.base() == v.data() + v.size());
79            assert(err == std::ios_base::eofbit);
80            assert(ex == -1);
81        }
82        {   // positive
83            std::string v = "1 234 567,89 ";
84            typedef input_iterator<const char*> I;
85            long double ex;
86            std::ios_base::iostate err = std::ios_base::goodbit;
87            I iter = f.get(I(v.data()), I(v.data() + v.size()),
88                                                false, ios, err, ex);
89            assert(iter.base() == v.data() + v.size());
90            assert(err == std::ios_base::eofbit);
91            assert(ex == 123456789);
92        }
93        {   // negative
94            std::string v = "-1 234 567,89";
95            typedef input_iterator<const char*> I;
96            long double ex;
97            std::ios_base::iostate err = std::ios_base::goodbit;
98            I iter = f.get(I(v.data()), I(v.data() + v.size()),
99                                                false, ios, err, ex);
100            assert(iter.base() == v.data() + v.size());
101            assert(err == std::ios_base::eofbit);
102            assert(ex == -123456789);
103        }
104        {   // negative
105            std::string v = "-1234567,89";
106            typedef input_iterator<const char*> I;
107            long double ex;
108            std::ios_base::iostate err = std::ios_base::goodbit;
109            I iter = f.get(I(v.data()), I(v.data() + v.size()),
110                                                false, ios, err, ex);
111            assert(iter.base() == v.data() + v.size());
112            assert(err == std::ios_base::eofbit);
113            assert(ex == -123456789);
114        }
115        {   // zero, showbase
116            std::string v = "0,00 \u20ac";  // €
117            showbase(ios);
118            typedef input_iterator<const char*> I;
119            long double ex;
120            std::ios_base::iostate err = std::ios_base::goodbit;
121            I iter = f.get(I(v.data()), I(v.data() + v.size()),
122                                                false, ios, err, ex);
123            assert(iter.base() == v.data() + v.size());
124            assert(err == std::ios_base::eofbit);
125            assert(ex == 0);
126        }
127        {   // zero, showbase
128            std::string v = "0,00 \u20ac";  // €
129            showbase(ios);
130            typedef input_iterator<const char*> I;
131            long double ex;
132            std::ios_base::iostate err = std::ios_base::goodbit;
133            I iter = f.get(I(v.data()), I(v.data() + v.size()),
134                                                false, ios, err, ex);
135            assert(iter.base() == v.data() + v.size());
136            assert(err == std::ios_base::eofbit);
137            assert(ex == 0);
138        }
139        {   // negative one, showbase
140            std::string v = "-0,01 \u20ac";
141            typedef input_iterator<const char*> I;
142            long double ex;
143            std::ios_base::iostate err = std::ios_base::goodbit;
144            I iter = f.get(I(v.data()), I(v.data() + v.size()),
145                                                false, ios, err, ex);
146            assert(iter.base() == v.data() + v.size());
147            assert(err == std::ios_base::eofbit);
148            assert(ex == -1);
149        }
150        {   // negative one, showbase
151            std::string v = "-0,01 \u20ac";
152            showbase(ios);
153            typedef input_iterator<const char*> I;
154            long double ex;
155            std::ios_base::iostate err = std::ios_base::goodbit;
156            I iter = f.get(I(v.data()), I(v.data() + v.size()),
157                                                false, ios, err, ex);
158            assert(iter.base() == v.data() + v.size());
159            assert(err == std::ios_base::eofbit);
160            assert(ex == -1);
161        }
162        {   // positive, showbase
163            std::string v = "1 234 567,89 \u20ac";
164            typedef input_iterator<const char*> I;
165            long double ex;
166            std::ios_base::iostate err = std::ios_base::goodbit;
167            I iter = f.get(I(v.data()), I(v.data() + v.size()),
168                                                false, ios, err, ex);
169            assert(iter.base() == v.data() + v.size());
170            assert(err == std::ios_base::eofbit);
171            assert(ex == 123456789);
172        }
173        {   // positive, showbase
174            std::string v = "1 234 567,89 \u20ac";
175            showbase(ios);
176            typedef input_iterator<const char*> I;
177            long double ex;
178            std::ios_base::iostate err = std::ios_base::goodbit;
179            I iter = f.get(I(v.data()), I(v.data() + v.size()),
180                                                false, ios, err, ex);
181            assert(iter.base() == v.data() + v.size());
182            assert(err == std::ios_base::eofbit);
183            assert(ex == 123456789);
184            noshowbase(ios);
185        }
186        {   // negative, showbase
187            std::string v = "-1 234 567,89 \u20ac";
188            showbase(ios);
189            typedef input_iterator<const char*> I;
190            long double ex;
191            std::ios_base::iostate err = std::ios_base::goodbit;
192            I iter = f.get(I(v.data()), I(v.data() + v.size()),
193                                                false, ios, err, ex);
194            assert(iter.base() == v.data() + v.size());
195            assert(err == std::ios_base::eofbit);
196            assert(ex == -123456789);
197            noshowbase(ios);
198        }
199        {   // negative, showbase
200            std::string v = "1 234 567,89 EUR -";
201            showbase(ios);
202            typedef input_iterator<const char*> I;
203            long double ex;
204            std::ios_base::iostate err = std::ios_base::goodbit;
205            I iter = f.get(I(v.data()), I(v.data() + v.size()),
206                                                false, ios, err, ex);
207            assert(iter.base() == v.data() + 13);
208            assert(err == std::ios_base::failbit);
209            noshowbase(ios);
210        }
211        {   // negative, showbase
212            std::string v = "1 234 567,89 EUR -";
213            typedef input_iterator<const char*> I;
214            long double ex;
215            std::ios_base::iostate err = std::ios_base::goodbit;
216            I iter = f.get(I(v.data()), I(v.data() + v.size()),
217                                                false, ios, err, ex);
218            assert(iter.base() == v.data() + 13);
219            assert(err == std::ios_base::goodbit);
220            assert(ex == 123456789);
221        }
222        noshowbase(ios);
223    }
224    {
225        const my_facet f(1);
226        // char, international
227        {   // zero
228            std::string v = "0,00";
229            typedef input_iterator<const char*> I;
230            long double ex;
231            std::ios_base::iostate err = std::ios_base::goodbit;
232            I iter = f.get(I(v.data()), I(v.data() + v.size()),
233                                                true, ios, err, ex);
234            assert(iter.base() == v.data() + v.size());
235            assert(err == std::ios_base::eofbit);
236            assert(ex == 0);
237        }
238        {   // negative one
239            std::string v = "-0,01";
240            typedef input_iterator<const char*> I;
241            long double ex;
242            std::ios_base::iostate err = std::ios_base::goodbit;
243            I iter = f.get(I(v.data()), I(v.data() + v.size()),
244                                                true, ios, err, ex);
245            assert(iter.base() == v.data() + v.size());
246            assert(err == std::ios_base::eofbit);
247            assert(ex == -1);
248        }
249        {   // positive
250            std::string v = "1 234 567,89 ";
251            typedef input_iterator<const char*> I;
252            long double ex;
253            std::ios_base::iostate err = std::ios_base::goodbit;
254            I iter = f.get(I(v.data()), I(v.data() + v.size()),
255                                                true, ios, err, ex);
256            assert(iter.base() == v.data() + v.size());
257            assert(err == std::ios_base::eofbit);
258            assert(ex == 123456789);
259        }
260        {   // negative
261            std::string v = "-1 234 567,89";
262            typedef input_iterator<const char*> I;
263            long double ex;
264            std::ios_base::iostate err = std::ios_base::goodbit;
265            I iter = f.get(I(v.data()), I(v.data() + v.size()),
266                                                true, ios, err, ex);
267            assert(iter.base() == v.data() + v.size());
268            assert(err == std::ios_base::eofbit);
269            assert(ex == -123456789);
270        }
271        {   // negative
272            std::string v = "-1234567,89";
273            typedef input_iterator<const char*> I;
274            long double ex;
275            std::ios_base::iostate err = std::ios_base::goodbit;
276            I iter = f.get(I(v.data()), I(v.data() + v.size()),
277                                                true, ios, err, ex);
278            assert(iter.base() == v.data() + v.size());
279            assert(err == std::ios_base::eofbit);
280            assert(ex == -123456789);
281        }
282        {   // zero, showbase
283            std::string v = "0,00 EUR";
284            showbase(ios);
285            typedef input_iterator<const char*> I;
286            long double ex;
287            std::ios_base::iostate err = std::ios_base::goodbit;
288            I iter = f.get(I(v.data()), I(v.data() + v.size()),
289                                                true, ios, err, ex);
290            assert(iter.base() == v.data() + v.size());
291            assert(err == std::ios_base::eofbit);
292            assert(ex == 0);
293        }
294        {   // zero, showbase
295            std::string v = "0,00 EUR";
296            showbase(ios);
297            typedef input_iterator<const char*> I;
298            long double ex;
299            std::ios_base::iostate err = std::ios_base::goodbit;
300            I iter = f.get(I(v.data()), I(v.data() + v.size()),
301                                                true, ios, err, ex);
302            assert(iter.base() == v.data() + v.size());
303            assert(err == std::ios_base::eofbit);
304            assert(ex == 0);
305        }
306        {   // negative one, showbase
307            std::string v = "-0,01 EUR";
308            typedef input_iterator<const char*> I;
309            long double ex;
310            std::ios_base::iostate err = std::ios_base::goodbit;
311            I iter = f.get(I(v.data()), I(v.data() + v.size()),
312                                                true, ios, err, ex);
313            assert(iter.base() == v.data() + v.size());
314            assert(err == std::ios_base::eofbit);
315            assert(ex == -1);
316        }
317        {   // negative one, showbase
318            std::string v = "-0,01 EUR";
319            showbase(ios);
320            typedef input_iterator<const char*> I;
321            long double ex;
322            std::ios_base::iostate err = std::ios_base::goodbit;
323            I iter = f.get(I(v.data()), I(v.data() + v.size()),
324                                                true, ios, err, ex);
325            assert(iter.base() == v.data() + v.size());
326            assert(err == std::ios_base::eofbit);
327            assert(ex == -1);
328        }
329        {   // positive, showbase
330            std::string v = "1 234 567,89 EUR";
331            typedef input_iterator<const char*> I;
332            long double ex;
333            std::ios_base::iostate err = std::ios_base::goodbit;
334            I iter = f.get(I(v.data()), I(v.data() + v.size()),
335                                                true, ios, err, ex);
336            assert(iter.base() == v.data() + v.size());
337            assert(err == std::ios_base::eofbit);
338            assert(ex == 123456789);
339        }
340        {   // positive, showbase
341            std::string v = "1 234 567,89 EUR";
342            showbase(ios);
343            typedef input_iterator<const char*> I;
344            long double ex;
345            std::ios_base::iostate err = std::ios_base::goodbit;
346            I iter = f.get(I(v.data()), I(v.data() + v.size()),
347                                                true, ios, err, ex);
348            assert(iter.base() == v.data() + v.size());
349            assert(err == std::ios_base::eofbit);
350            assert(ex == 123456789);
351            noshowbase(ios);
352        }
353        {   // negative, showbase
354            std::string v = "-1 234 567,89 EUR";
355            showbase(ios);
356            typedef input_iterator<const char*> I;
357            long double ex;
358            std::ios_base::iostate err = std::ios_base::goodbit;
359            I iter = f.get(I(v.data()), I(v.data() + v.size()),
360                                                true, ios, err, ex);
361            assert(iter.base() == v.data() + v.size());
362            assert(err == std::ios_base::eofbit);
363            assert(ex == -123456789);
364            noshowbase(ios);
365        }
366        {   // negative, showbase
367            std::string v = "1 234 567,89 Eu-";
368            showbase(ios);
369            typedef input_iterator<const char*> I;
370            long double ex;
371            std::ios_base::iostate err = std::ios_base::goodbit;
372            I iter = f.get(I(v.data()), I(v.data() + v.size()),
373                                                true, ios, err, ex);
374            assert(iter.base() == v.data() + 14);
375            assert(err == std::ios_base::failbit);
376            noshowbase(ios);
377        }
378        {   // negative, showbase
379            std::string v = "1 234 567,89 Eu-";
380            typedef input_iterator<const char*> I;
381            long double ex;
382            std::ios_base::iostate err = std::ios_base::goodbit;
383            I iter = f.get(I(v.data()), I(v.data() + v.size()),
384                                                true, ios, err, ex);
385            assert(iter.base() == v.data() + 13);
386            assert(err == std::ios_base::goodbit);
387            assert(ex == 123456789);
388        }
389    }
390    {
391        const my_facetw f(1);
392        // wchar_t, national
393        {   // zero
394            std::wstring v = L"0,00";
395            typedef input_iterator<const wchar_t*> I;
396            long double ex;
397            std::ios_base::iostate err = std::ios_base::goodbit;
398            I iter = f.get(I(v.data()), I(v.data() + v.size()),
399                                                false, ios, err, ex);
400            assert(iter.base() == v.data() + v.size());
401            assert(err == std::ios_base::eofbit);
402            assert(ex == 0);
403        }
404        {   // negative one
405            std::wstring v = L"-0,01";
406            typedef input_iterator<const wchar_t*> I;
407            long double ex;
408            std::ios_base::iostate err = std::ios_base::goodbit;
409            I iter = f.get(I(v.data()), I(v.data() + v.size()),
410                                                false, ios, err, ex);
411            assert(iter.base() == v.data() + v.size());
412            assert(err == std::ios_base::eofbit);
413            assert(ex == -1);
414        }
415        {   // positive
416            std::wstring v = L"1 234 567,89 ";
417            typedef input_iterator<const wchar_t*> I;
418            long double ex;
419            std::ios_base::iostate err = std::ios_base::goodbit;
420            I iter = f.get(I(v.data()), I(v.data() + v.size()),
421                                                false, ios, err, ex);
422            assert(iter.base() == v.data() + v.size());
423            assert(err == std::ios_base::eofbit);
424            assert(ex == 123456789);
425        }
426        {   // negative
427            std::wstring v = L"-1 234 567,89";
428            typedef input_iterator<const wchar_t*> I;
429            long double ex;
430            std::ios_base::iostate err = std::ios_base::goodbit;
431            I iter = f.get(I(v.data()), I(v.data() + v.size()),
432                                                false, ios, err, ex);
433            assert(iter.base() == v.data() + v.size());
434            assert(err == std::ios_base::eofbit);
435            assert(ex == -123456789);
436        }
437        {   // negative
438            std::wstring v = L"-1234567,89";
439            typedef input_iterator<const wchar_t*> I;
440            long double ex;
441            std::ios_base::iostate err = std::ios_base::goodbit;
442            I iter = f.get(I(v.data()), I(v.data() + v.size()),
443                                                false, ios, err, ex);
444            assert(iter.base() == v.data() + v.size());
445            assert(err == std::ios_base::eofbit);
446            assert(ex == -123456789);
447        }
448        {   // zero, showbase
449            std::wstring v = L"0,00 \u20ac";
450            showbase(ios);
451            typedef input_iterator<const wchar_t*> I;
452            long double ex;
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);
458            assert(ex == 0);
459        }
460        {   // zero, showbase
461            std::wstring v = L"0,00 \u20ac";
462            showbase(ios);
463            typedef input_iterator<const wchar_t*> I;
464            long double ex;
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);
470            assert(ex == 0);
471        }
472        {   // negative one, showbase
473            std::wstring v = L"-0,01 \u20ac";
474            typedef input_iterator<const wchar_t*> I;
475            long double ex;
476            std::ios_base::iostate err = std::ios_base::goodbit;
477            I iter = f.get(I(v.data()), I(v.data() + v.size()),
478                                                false, ios, err, ex);
479            assert(iter.base() == v.data() + v.size());
480            assert(err == std::ios_base::eofbit);
481            assert(ex == -1);
482        }
483        {   // negative one, showbase
484            std::wstring v = L"-0,01 \u20ac";
485            showbase(ios);
486            typedef input_iterator<const wchar_t*> I;
487            long double ex;
488            std::ios_base::iostate err = std::ios_base::goodbit;
489            I iter = f.get(I(v.data()), I(v.data() + v.size()),
490                                                false, ios, err, ex);
491            assert(iter.base() == v.data() + v.size());
492            assert(err == std::ios_base::eofbit);
493            assert(ex == -1);
494        }
495        {   // positive, showbase
496            std::wstring v = L"1 234 567,89 \u20ac";
497            typedef input_iterator<const wchar_t*> I;
498            long double ex;
499            std::ios_base::iostate err = std::ios_base::goodbit;
500            I iter = f.get(I(v.data()), I(v.data() + v.size()),
501                                                false, ios, err, ex);
502            assert(iter.base() == v.data() + v.size());
503            assert(err == std::ios_base::eofbit);
504            assert(ex == 123456789);
505        }
506        {   // positive, showbase
507            std::wstring v = L"1 234 567,89 \u20ac";
508            showbase(ios);
509            typedef input_iterator<const wchar_t*> I;
510            long double ex;
511            std::ios_base::iostate err = std::ios_base::goodbit;
512            I iter = f.get(I(v.data()), I(v.data() + v.size()),
513                                                false, ios, err, ex);
514            assert(iter.base() == v.data() + v.size());
515            assert(err == std::ios_base::eofbit);
516            assert(ex == 123456789);
517            noshowbase(ios);
518        }
519        {   // negative, showbase
520            std::wstring v = L"-1 234 567,89 \u20ac";
521            showbase(ios);
522            typedef input_iterator<const wchar_t*> I;
523            long double ex;
524            std::ios_base::iostate err = std::ios_base::goodbit;
525            I iter = f.get(I(v.data()), I(v.data() + v.size()),
526                                                false, ios, err, ex);
527            assert(iter.base() == v.data() + v.size());
528            assert(err == std::ios_base::eofbit);
529            assert(ex == -123456789);
530            noshowbase(ios);
531        }
532        {   // negative, showbase
533            std::wstring v = L"1 234 567,89 EUR -";
534            showbase(ios);
535            typedef input_iterator<const wchar_t*> I;
536            long double ex;
537            std::ios_base::iostate err = std::ios_base::goodbit;
538            I iter = f.get(I(v.data()), I(v.data() + v.size()),
539                                                false, ios, err, ex);
540            assert(iter.base() == v.data() + 13);
541            assert(err == std::ios_base::failbit);
542            noshowbase(ios);
543        }
544        {   // negative, showbase
545            std::wstring v = L"1 234 567,89 EUR -";
546            typedef input_iterator<const wchar_t*> I;
547            long double ex;
548            std::ios_base::iostate err = std::ios_base::goodbit;
549            I iter = f.get(I(v.data()), I(v.data() + v.size()),
550                                                false, ios, err, ex);
551            assert(iter.base() == v.data() + 13);
552            assert(err == std::ios_base::goodbit);
553            assert(ex == 123456789);
554        }
555    }
556    {
557        const my_facetw f(1);
558        // wchar_t, international
559        {   // zero
560            std::wstring v = L"0,00";
561            typedef input_iterator<const wchar_t*> I;
562            long double ex;
563            std::ios_base::iostate err = std::ios_base::goodbit;
564            I iter = f.get(I(v.data()), I(v.data() + v.size()),
565                                                true, ios, err, ex);
566            assert(iter.base() == v.data() + v.size());
567            assert(err == std::ios_base::eofbit);
568            assert(ex == 0);
569        }
570        {   // negative one
571            std::wstring v = L"-0,01";
572            typedef input_iterator<const wchar_t*> I;
573            long double ex;
574            std::ios_base::iostate err = std::ios_base::goodbit;
575            I iter = f.get(I(v.data()), I(v.data() + v.size()),
576                                                true, ios, err, ex);
577            assert(iter.base() == v.data() + v.size());
578            assert(err == std::ios_base::eofbit);
579            assert(ex == -1);
580        }
581        {   // positive
582            std::wstring v = L"1 234 567,89 ";
583            typedef input_iterator<const wchar_t*> I;
584            long double ex;
585            std::ios_base::iostate err = std::ios_base::goodbit;
586            I iter = f.get(I(v.data()), I(v.data() + v.size()),
587                                                true, ios, err, ex);
588            assert(iter.base() == v.data() + v.size());
589            assert(err == std::ios_base::eofbit);
590            assert(ex == 123456789);
591        }
592        {   // negative
593            std::wstring v = L"-1 234 567,89";
594            typedef input_iterator<const wchar_t*> I;
595            long double ex;
596            std::ios_base::iostate err = std::ios_base::goodbit;
597            I iter = f.get(I(v.data()), I(v.data() + v.size()),
598                                                true, ios, err, ex);
599            assert(iter.base() == v.data() + v.size());
600            assert(err == std::ios_base::eofbit);
601            assert(ex == -123456789);
602        }
603        {   // negative
604            std::wstring v = L"-1234567,89";
605            typedef input_iterator<const wchar_t*> I;
606            long double ex;
607            std::ios_base::iostate err = std::ios_base::goodbit;
608            I iter = f.get(I(v.data()), I(v.data() + v.size()),
609                                                true, ios, err, ex);
610            assert(iter.base() == v.data() + v.size());
611            assert(err == std::ios_base::eofbit);
612            assert(ex == -123456789);
613        }
614        {   // zero, showbase
615            std::wstring v = L"0,00 EUR";
616            showbase(ios);
617            typedef input_iterator<const wchar_t*> I;
618            long double ex;
619            std::ios_base::iostate err = std::ios_base::goodbit;
620            I iter = f.get(I(v.data()), I(v.data() + v.size()),
621                                                true, ios, err, ex);
622            assert(iter.base() == v.data() + v.size());
623            assert(err == std::ios_base::eofbit);
624            assert(ex == 0);
625        }
626        {   // zero, showbase
627            std::wstring v = L"0,00 EUR";
628            showbase(ios);
629            typedef input_iterator<const wchar_t*> I;
630            long double ex;
631            std::ios_base::iostate err = std::ios_base::goodbit;
632            I iter = f.get(I(v.data()), I(v.data() + v.size()),
633                                                true, ios, err, ex);
634            assert(iter.base() == v.data() + v.size());
635            assert(err == std::ios_base::eofbit);
636            assert(ex == 0);
637        }
638        {   // negative one, showbase
639            std::wstring v = L"-0,01 EUR";
640            typedef input_iterator<const wchar_t*> I;
641            long double ex;
642            std::ios_base::iostate err = std::ios_base::goodbit;
643            I iter = f.get(I(v.data()), I(v.data() + v.size()),
644                                                true, ios, err, ex);
645            assert(iter.base() == v.data() + v.size());
646            assert(err == std::ios_base::eofbit);
647            assert(ex == -1);
648        }
649        {   // negative one, showbase
650            std::wstring v = L"-0,01 EUR";
651            showbase(ios);
652            typedef input_iterator<const wchar_t*> I;
653            long double ex;
654            std::ios_base::iostate err = std::ios_base::goodbit;
655            I iter = f.get(I(v.data()), I(v.data() + v.size()),
656                                                true, ios, err, ex);
657            assert(iter.base() == v.data() + v.size());
658            assert(err == std::ios_base::eofbit);
659            assert(ex == -1);
660        }
661        {   // positive, showbase
662            std::wstring v = L"1 234 567,89 EUR";
663            typedef input_iterator<const wchar_t*> I;
664            long double ex;
665            std::ios_base::iostate err = std::ios_base::goodbit;
666            I iter = f.get(I(v.data()), I(v.data() + v.size()),
667                                                true, ios, err, ex);
668            assert(iter.base() == v.data() + v.size());
669            assert(err == std::ios_base::eofbit);
670            assert(ex == 123456789);
671        }
672        {   // positive, showbase
673            std::wstring v = L"1 234 567,89 EUR";
674            showbase(ios);
675            typedef input_iterator<const wchar_t*> I;
676            long double ex;
677            std::ios_base::iostate err = std::ios_base::goodbit;
678            I iter = f.get(I(v.data()), I(v.data() + v.size()),
679                                                true, ios, err, ex);
680            assert(iter.base() == v.data() + v.size());
681            assert(err == std::ios_base::eofbit);
682            assert(ex == 123456789);
683            noshowbase(ios);
684        }
685        {   // negative, showbase
686            std::wstring v = L"-1 234 567,89 EUR";
687            showbase(ios);
688            typedef input_iterator<const wchar_t*> I;
689            long double ex;
690            std::ios_base::iostate err = std::ios_base::goodbit;
691            I iter = f.get(I(v.data()), I(v.data() + v.size()),
692                                                true, ios, err, ex);
693            assert(iter.base() == v.data() + v.size());
694            assert(err == std::ios_base::eofbit);
695            assert(ex == -123456789);
696            noshowbase(ios);
697        }
698        {   // negative, showbase
699            std::wstring v = L"1 234 567,89 Eu-";
700            showbase(ios);
701            typedef input_iterator<const wchar_t*> I;
702            long double ex;
703            std::ios_base::iostate err = std::ios_base::goodbit;
704            I iter = f.get(I(v.data()), I(v.data() + v.size()),
705                                                true, ios, err, ex);
706            assert(iter.base() == v.data() + 14);
707            assert(err == std::ios_base::failbit);
708            noshowbase(ios);
709        }
710        {   // negative, showbase
711            std::wstring v = L"1 234 567,89 Eu-";
712            typedef input_iterator<const wchar_t*> I;
713            long double ex;
714            std::ios_base::iostate err = std::ios_base::goodbit;
715            I iter = f.get(I(v.data()), I(v.data() + v.size()),
716                                                true, ios, err, ex);
717            assert(iter.base() == v.data() + 13);
718            assert(err == std::ios_base::goodbit);
719            assert(ex == 123456789);
720        }
721    }
722}
723