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