get_string_en_US.pass.cpp revision e2f2a15066552758a508e8a7325e0ccad4a5389b
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com//===----------------------------------------------------------------------===//
2a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
3a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//                     The LLVM Compiler Infrastructure
4a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
5a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open
6a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Source Licenses. See LICENSE.TXT for details.
7a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
8a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//===----------------------------------------------------------------------===//
9a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
10a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// <locale>
11a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
12a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// class money_get<charT, InputIterator>
13a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
14a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// iter_type get(iter_type b, iter_type e, bool intl, ios_base& iob,
15a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//               ios_base::iostate& err, string_type& v) const;
16a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
17a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include <locale>
18a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include <ios>
19a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include <streambuf>
20a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include <cassert>
21a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include "iterators.h"
22a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
23a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgtypedef std::money_get<char, input_iterator<const char*> > Fn;
24a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
25a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass my_facet
26a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    : public Fn
27a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org{
28a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgpublic:
29a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    explicit my_facet(std::size_t refs = 0)
30a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        : Fn(refs) {}
31a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
327979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
331c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.orgtypedef std::money_get<wchar_t, input_iterator<const wchar_t*> > Fw;
34a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
35fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.orgclass my_facetw
36c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org    : public Fw
377979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org{
38a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgpublic:
39ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org    explicit my_facetw(std::size_t refs = 0)
40ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org        : Fw(refs) {}
41a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
42a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
43a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgint main()
44a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org{
45a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    std::ios ios(0);
46a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    std::string loc_name("en_US.UTF-8");
47a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    ios.imbue(std::locale(ios.getloc(),
48a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                          new std::moneypunct_byname<char, false>(loc_name)));
491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    ios.imbue(std::locale(ios.getloc(),
50a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                          new std::moneypunct_byname<char, true>(loc_name)));
51a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    ios.imbue(std::locale(ios.getloc(),
52a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                          new std::moneypunct_byname<wchar_t, false>(loc_name)));
53a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    ios.imbue(std::locale(ios.getloc(),
54a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                          new std::moneypunct_byname<wchar_t, true>(loc_name)));
55a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    {
56a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        const my_facet f(1);
57dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org        // char, national
58837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org        {   // zero
5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org            std::string v = "0.00";
60a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
61a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
62a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
63a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
64a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
65a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
6631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org            assert(err == std::ios_base::eofbit);
67a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "0");
68a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
6994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org        {   // negative one
70a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-0.01";
71a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
72a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
73a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
74c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
75a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
76a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
77876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(err == std::ios_base::eofbit);
784f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org            assert(ex == "-1");
79a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
80a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive
81a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "1,234,567.89";
82a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
83a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
84a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
85a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
864a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org                                                false, ios, err, ex);
87a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
88a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
89594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org            assert(ex == "123456789");
90a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
91a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative
921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            std::string v = "-1,234,567.89";
93a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
941456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org            std::string ex;
95c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
96c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
97c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org                                                false, ios, err, ex);
984f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org            assert(iter.base() == v.data() + v.size());
99e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org            assert(err == std::ios_base::eofbit);
100c00ec2b94bc5505fa81f81daefd956f5a8776a09danno@chromium.org            assert(ex == "-123456789");
1014f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org        }
1024f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org        {   // negative
1030a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org            std::string v = "-1234567.89";
104a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
10583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org            std::string ex;
106c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
1074e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
10856454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org                                                false, ios, err, ex);
109a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
110a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
11146a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org            assert(ex == "-123456789");
1127b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org        }
113a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // zero, showbase
114d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::string v = "$0.00";
115c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org            typedef input_iterator<const char*> I;
116c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::string ex;
117c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
118a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
11949edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org                                                false, ios, err, ex);
120a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
121a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
122a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "0");
1234f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org        }
1244f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org        {   // zero, showbase
1252bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            std::string v = "$0.00";
126a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
127d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org            typedef input_iterator<const char*> I;
12871fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org            std::string ex;
129160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
1304f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
1314f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org                                                false, ios, err, ex);
132e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org            assert(iter.base() == v.data() + v.size());
1330ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry            assert(err == std::ios_base::eofbit);
1344f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org            assert(ex == "0");
1354f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org            noshowbase(ios);
136a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
137c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org        {   // negative one, showbase
1384d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org            std::string v = "-$0.01";
139c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            typedef input_iterator<const char*> I;
140378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org            std::string ex;
141c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
142c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
143e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org                                                false, ios, err, ex);
144a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
145a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
146a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "-1");
147355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org        }
148efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org        {   // negative one, showbase
149471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            std::string v = "-$0.01";
150a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
151a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
152a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
15383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
154a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
1555f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org                                                false, ios, err, ex);
156a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
157f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com            assert(err == std::ios_base::eofbit);
158a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "-1");
159a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
160e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org        }
161a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive, showbase
16232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org            std::string v = "$1,234,567.89";
163a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
164a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
165a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
166a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
16783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org                                                false, ios, err, ex);
16874f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org            assert(iter.base() == v.data() + v.size());
16974f333bce721daf6b1f9d7d3d3faa623f77658d7vegorov@chromium.org            assert(err == std::ios_base::eofbit);
170e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org            assert(ex == "123456789");
171a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
172a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive, showbase
173a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "$1,234,567.89";
174160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org            showbase(ios);
1750a4e901cdfb5505a896d30aa8c2e04fce0fbe069vegorov@chromium.org            typedef input_iterator<const char*> I;
176b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org            std::string ex;
177471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
178a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
179d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org                                                false, ios, err, ex);
180a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
181ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org            assert(err == std::ios_base::eofbit);
182394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com            assert(ex == "123456789");
18394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org            noshowbase(ios);
184a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
1854f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org        {   // negative, showbase
186a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-$1,234,567.89";
187a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
188d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org            typedef input_iterator<const char*> I;
189be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org            std::string ex;
190154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
191a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
19228faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org                                                false, ios, err, ex);
193003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org            assert(iter.base() == v.data() + v.size());
19428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            assert(err == std::ios_base::eofbit);
19528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            assert(ex == "-123456789");
19628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            noshowbase(ios);
197c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org        }
198c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org        {   // negative, showbase
199d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::string v = "-USD 1,234,567.89";
200a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
201c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            typedef input_iterator<const char*> I;
202c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::string ex;
203c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
20457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
205c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org                                                false, ios, err, ex);
20678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org            assert(iter.base() == v.data() + 1);
207a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::failbit);
208c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            assert(ex == "");
209c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            noshowbase(ios);
210d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        }
211c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org        {   // negative, showbase
212a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-USD 1,234,567.89";
21332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            typedef input_iterator<const char*> I;
21432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::string ex;
21532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
21632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
21732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org                                                false, ios, err, ex);
218dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(iter.base() == v.data() + 1);
219a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::failbit);
220a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "");
22132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org        }
22232cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    }
22332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org    {
22432cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org        const my_facet f(1);
22532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org        // char, international
22632cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org        {   // zero
22732cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::string v = "0.00";
22832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            typedef input_iterator<const char*> I;
22932cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::string ex;
23032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
231a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
232a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
23332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            assert(iter.base() == v.data() + v.size());
234a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
2358f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(ex == "0");
2368f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org        }
2378f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org        {   // negative one
2388f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            std::string v = "-0.01";
2398f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            typedef input_iterator<const char*> I;
240a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
241a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
2428f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
2438f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org                                                true, ios, err, ex);
2448f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(iter.base() == v.data() + v.size());
2458f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(err == std::ios_base::eofbit);
246a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "-1");
247a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
248a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive
249a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "1,234,567.89";
250812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            typedef input_iterator<const char*> I;
251812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            std::string ex;
252812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
253812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
254812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org                                                true, ios, err, ex);
255812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            assert(iter.base() == v.data() + v.size());
256812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            assert(err == std::ios_base::eofbit);
257812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            assert(ex == "123456789");
258ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org        }
259ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org        {   // negative
260ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org            std::string v = "-1,234,567.89";
261a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
262a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
263a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
264a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
265a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
266b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org            assert(iter.base() == v.data() + v.size());
2678f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(err == std::ios_base::eofbit);
268ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org            assert(ex == "-123456789");
269ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org        }
270ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org        {   // negative
2718f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            std::string v = "-1234567.89";
2728f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            typedef input_iterator<const char*> I;
273a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
2741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
2751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
2761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                                                true, ios, err, ex);
2771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org            assert(iter.base() == v.data() + v.size());
2788f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(err == std::ios_base::eofbit);
279c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org            assert(ex == "-123456789");
2808f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org        }
281c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org        {   // zero, showbase
2825f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org            std::string v = "USD 0.00";
283a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
284a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
285a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
286a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
287a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
2888f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(iter.base() == v.data() + v.size());
2898f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            assert(err == std::ios_base::eofbit);
290471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            assert(ex == "0");
291471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org        }
292a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // zero, showbase
2938f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            std::string v = "USD 0.00";
2948f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            showbase(ios);
2958f806e8b8f108ca2c8899c5d31861ef1273dcd4akarlklose@chromium.org            typedef input_iterator<const char*> I;
296fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org            std::string ex;
297fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
298fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
299a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
300a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
301a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
302a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "0");
303a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
304a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
305a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative one, showbase
306a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-USD 0.01";
307a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
30832cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::string ex;
309e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
310e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
311e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                                                true, ios, err, ex);
312e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(iter.base() == v.data() + v.size());
313e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(err == std::ios_base::eofbit);
314e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(ex == "-1");
315e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        }
316e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        {   // negative one, showbase
317e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string v = "-USD 0.01";
318e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            showbase(ios);
319e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            typedef input_iterator<const char*> I;
320e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string ex;
321e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
322e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
323e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                                                true, ios, err, ex);
324e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(iter.base() == v.data() + v.size());
325e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(err == std::ios_base::eofbit);
326e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(ex == "-1");
327e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            noshowbase(ios);
328e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        }
329e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        {   // positive, showbase
330e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string v = "USD 1,234,567.89";
331e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            typedef input_iterator<const char*> I;
332e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string ex;
333e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
334e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
335e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                                                true, ios, err, ex);
336e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(iter.base() == v.data() + v.size());
337e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(err == std::ios_base::eofbit);
338e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(ex == "123456789");
339e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        }
340e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        {   // positive, showbase
341e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string v = "USD 1,234,567.89";
342e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            showbase(ios);
343e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            typedef input_iterator<const char*> I;
344e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::string ex;
345e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
346e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
347e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                                                true, ios, err, ex);
348e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(iter.base() == v.data() + v.size());
349e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            assert(err == std::ios_base::eofbit);
35032cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            assert(ex == "123456789");
351a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
352d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        }
353a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative, showbase
354a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-USD 1,234,567.89";
355a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
356a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const char*> I;
357a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
358a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
359a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
360a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
361a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
362a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
363a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "-123456789");
364a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
365a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
366a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative, showbase
367a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-$1,234,567.89";
368a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
3692bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            typedef input_iterator<const char*> I;
370a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
371a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
372a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
373a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                true, ios, err, ex);
374a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + 1);
375a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::failbit);
376a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "");
3772bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            noshowbase(ios);
378a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
379a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative, showbase
380a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string v = "-$1,234,567.89";
3812bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            typedef input_iterator<const char*> I;
382a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::string ex;
383a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
384a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
3852bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org                                                true, ios, err, ex);
386a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + 1);
387a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::failbit);
388a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == "");
3892bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org        }
390a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    }
391a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    {
392a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        const my_facetw f(1);
3932bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org        // wchar_t, national
394a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // zero
395a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"0.00";
396a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
3972bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            std::wstring ex;
398a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
399a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
400a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
401c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            assert(iter.base() == v.data() + v.size());
402c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            assert(err == std::ios_base::eofbit);
403c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            assert(ex == L"0");
404c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org        }
405c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org        {   // negative one
4062bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            std::wstring v = L"-0.01";
407a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
408a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
409a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
4102bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
411a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
412a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
413a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
4142bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            assert(ex == L"-1");
415a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
416a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive
417a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"1,234,567.89";
4182bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org            typedef input_iterator<const wchar_t*> I;
419a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
420a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
421a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
422c22f2d813ad21e25e8df5d4a371fd63f582e4262danno@chromium.org                                                false, ios, err, ex);
423c22f2d813ad21e25e8df5d4a371fd63f582e4262danno@chromium.org            assert(iter.base() == v.data() + v.size());
424935781b3604caa053bf75ce6b1079d79a225e63fdanno@chromium.org            assert(err == std::ios_base::eofbit);
425935781b3604caa053bf75ce6b1079d79a225e63fdanno@chromium.org            assert(ex == L"123456789");
426d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        }
427d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        {   // negative
428d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring v = L"-1,234,567.89";
429d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            typedef input_iterator<const wchar_t*> I;
430d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring ex;
431d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
432d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
433d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org                                                false, ios, err, ex);
434d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            assert(iter.base() == v.data() + v.size());
435d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            assert(err == std::ios_base::eofbit);
436d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            assert(ex == L"-123456789");
437d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        }
438d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        {   // negative
439d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring v = L"-1234567.89";
440d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            typedef input_iterator<const wchar_t*> I;
441d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring ex;
442d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
443d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
4442bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org                                                false, ios, err, ex);
445a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
446a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
447a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"-123456789");
448a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
449a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // zero, showbase
450d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring v = L"$0.00";
451a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
452a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
453a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
454a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
455a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
456a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
457a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
458a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"0");
459a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
460d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org        {   // zero, showbase
461a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"$0.00";
462a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
463a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org            typedef input_iterator<const wchar_t*> I;
464d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring ex;
465a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
466a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
467a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org                                                false, ios, err, ex);
468a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org            assert(iter.base() == v.data() + v.size());
469a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
470a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"0");
471a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
4723847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        }
4733847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        {   // negative one, showbase
4743847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring v = L"-$0.01";
4753847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            typedef input_iterator<const wchar_t*> I;
4763847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring ex;
4773847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::ios_base::iostate err = std::ios_base::goodbit;
478ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
4793847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com                                                false, ios, err, ex);
4803847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(iter.base() == v.data() + v.size());
4813847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(err == std::ios_base::eofbit);
4823847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(ex == L"-1");
4833847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        }
4843847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        {   // negative one, showbase
4853847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring v = L"-$0.01";
4863847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            showbase(ios);
4873847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            typedef input_iterator<const wchar_t*> I;
4883847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring ex;
4893847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::ios_base::iostate err = std::ios_base::goodbit;
4903847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            I iter = f.get(I(v.data()), I(v.data() + v.size()),
4913847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com                                                false, ios, err, ex);
4923847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(iter.base() == v.data() + v.size());
4933847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(err == std::ios_base::eofbit);
4943847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(ex == L"-1");
4953847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            noshowbase(ios);
4963847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        }
4973847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        {   // positive, showbase
4983847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring v = L"$1,234,567.89";
4993847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            typedef input_iterator<const wchar_t*> I;
5003847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring ex;
50132cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
5023847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            I iter = f.get(I(v.data()), I(v.data() + v.size()),
5033847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com                                                false, ios, err, ex);
5043847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(iter.base() == v.data() + v.size());
5053847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(err == std::ios_base::eofbit);
5063847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(ex == L"123456789");
5073847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        }
5083847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        {   // positive, showbase
5093847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring v = L"$1,234,567.89";
5103847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            showbase(ios);
5113847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            typedef input_iterator<const wchar_t*> I;
5123847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring ex;
5133847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::ios_base::iostate err = std::ios_base::goodbit;
5143847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            I iter = f.get(I(v.data()), I(v.data() + v.size()),
5153847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com                                                false, ios, err, ex);
5163847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(iter.base() == v.data() + v.size());
5173847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(err == std::ios_base::eofbit);
5183847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            assert(ex == L"123456789");
5193847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            noshowbase(ios);
5203847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        }
5213847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com        {   // negative, showbase
5223847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring v = L"-$1,234,567.89";
5233847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            showbase(ios);
5243847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            typedef input_iterator<const wchar_t*> I;
5253847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::wstring ex;
5263847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            std::ios_base::iostate err = std::ios_base::goodbit;
5273847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com            I iter = f.get(I(v.data()), I(v.data() + v.size()),
52805ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org                                                false, ios, err, ex);
52905ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(iter.base() == v.data() + v.size());
53028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            assert(err == std::ios_base::eofbit);
53105ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(ex == L"-123456789");
53205ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            noshowbase(ios);
53305ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org        }
53428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org        {   // negative, showbase
53528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::wstring v = L"-USD 1,234,567.89";
53605ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            showbase(ios);
53705ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            typedef input_iterator<const wchar_t*> I;
53828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::wstring ex;
53928faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
54028faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
54128faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org                                                false, ios, err, ex);
54205ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(iter.base() == v.data() + 1);
54305ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(err == std::ios_base::failbit);
5447c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org            assert(ex == L"");
54532cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            noshowbase(ios);
546876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        }
547876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        {   // negative, showbase
548876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring v = L"-USD 1,234,567.89";
549876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            typedef input_iterator<const wchar_t*> I;
550876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring ex;
551876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
552876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
553876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org                                                false, ios, err, ex);
554876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(iter.base() == v.data() + 1);
555876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(err == std::ios_base::failbit);
556876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(ex == L"");
557876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        }
558876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org    }
559876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org    {
560876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        const my_facetw f(1);
561876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        // wchar_t, international
562876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        {   // zero
563876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring v = L"0.00";
564876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            typedef input_iterator<const wchar_t*> I;
565876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring ex;
566876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
567876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
568876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org                                                true, ios, err, ex);
569876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(iter.base() == v.data() + v.size());
570876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(err == std::ios_base::eofbit);
571876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(ex == L"0");
572876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        }
573876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        {   // negative one
574876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring v = L"-0.01";
575876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            typedef input_iterator<const wchar_t*> I;
576876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring ex;
577876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
578876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
579876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org                                                true, ios, err, ex);
580876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(iter.base() == v.data() + v.size());
581876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(err == std::ios_base::eofbit);
582876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            assert(ex == L"-1");
583876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        }
584876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org        {   // positive
585876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring v = L"1,234,567.89";
586876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            typedef input_iterator<const wchar_t*> I;
587876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::wstring ex;
588876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
589876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
59005ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org                                                true, ios, err, ex);
59105ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(iter.base() == v.data() + v.size());
59205ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(err == std::ios_base::eofbit);
59332cb9b2c195baa85d4c04f4c7b22b9aa04e97d3fverwaest@chromium.org            assert(ex == L"123456789");
594a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
595a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative
596a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"-1,234,567.89";
597a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
598a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
5991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
6007b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
6017b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org                                                true, ios, err, ex);
6027b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org            assert(iter.base() == v.data() + v.size());
6037b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org            assert(err == std::ios_base::eofbit);
604a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"-123456789");
60528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org        }
606169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org        {   // negative
60728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::wstring v = L"-1234567.89";
60828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            typedef input_iterator<const wchar_t*> I;
609a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
610a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
611a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
612b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org                                                true, ios, err, ex);
613a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
614a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
615837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org            assert(ex == L"-123456789");
616fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        }
617fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        {   // zero, showbase
6184e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org            std::wstring v = L"USD 0.00";
619ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org            typedef input_iterator<const wchar_t*> I;
62046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            std::wstring ex;
62146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
62246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
62346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org                                                true, ios, err, ex);
62446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            assert(iter.base() == v.data() + v.size());
62546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            assert(err == std::ios_base::eofbit);
62646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            assert(ex == L"0");
627e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        }
6284e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org        {   // zero, showbase
6294e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org            std::wstring v = L"USD 0.00";
630d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            showbase(ios);
631d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            typedef input_iterator<const wchar_t*> I;
632d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::wstring ex;
633d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
634d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
635d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org                                                true, ios, err, ex);
636d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            assert(iter.base() == v.data() + v.size());
637a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
638a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"0");
639a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
640a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
641a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative one, showbase
642a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"-USD 0.01";
64328faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            typedef input_iterator<const wchar_t*> I;
64428faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::wstring ex;
64528faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
64628faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
64728faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org                                                true, ios, err, ex);
64828faa982749c4aa9c090939453dea14bb118f613jkummerow@chromium.org            assert(iter.base() == v.data() + v.size());
64905ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(err == std::ios_base::eofbit);
65005ed9ddc6ff3a1ab3983c50d378cddfa257869b6jkummerow@chromium.org            assert(ex == L"-1");
651a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
652a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative one, showbase
653a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring v = L"-USD 0.01";
654a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
655a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
656a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
657dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
658dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
659dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org                                                true, ios, err, ex);
660dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(iter.base() == v.data() + v.size());
661a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
662dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(ex == L"-1");
663dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            noshowbase(ios);
664dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org        }
665dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org        {   // positive, showbase
666dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            std::wstring v = L"USD 1,234,567.89";
667dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            typedef input_iterator<const wchar_t*> I;
668dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            std::wstring ex;
669dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
670dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
671dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org                                                true, ios, err, ex);
672dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(iter.base() == v.data() + v.size());
673dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(err == std::ios_base::eofbit);
674dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org            assert(ex == L"123456789");
675dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org        }
676a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // positive, showbase
677d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring v = L"USD 1,234,567.89";
678d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            showbase(ios);
679d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            typedef input_iterator<const wchar_t*> I;
680d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::wstring ex;
681d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
682d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
683d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org                                                true, ios, err, ex);
684a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
685a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(err == std::ios_base::eofbit);
686a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"123456789");
687a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
688fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org        }
689a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative, showbase
69009d7ab5aba54ebac170eac755664c45eefb0be7dulan@chromium.org            std::wstring v = L"-USD 1,234,567.89";
69109d7ab5aba54ebac170eac755664c45eefb0be7dulan@chromium.org            showbase(ios);
69209d7ab5aba54ebac170eac755664c45eefb0be7dulan@chromium.org            typedef input_iterator<const wchar_t*> I;
693a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::wstring ex;
694a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
695a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
6963847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com                                                true, ios, err, ex);
697a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + v.size());
6984d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org            assert(err == std::ios_base::eofbit);
699fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org            assert(ex == L"-123456789");
700a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            noshowbase(ios);
701a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
702a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        {   // negative, showbase
7031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            std::wstring v = L"-$1,234,567.89";
704a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            showbase(ios);
705a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            typedef input_iterator<const wchar_t*> I;
706fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            std::wstring ex;
707fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
708fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
709fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org                                                true, ios, err, ex);
710a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(iter.base() == v.data() + 1);
711fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            assert(err == std::ios_base::failbit);
712a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            assert(ex == L"");
713d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            noshowbase(ios);
714d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org        }
715d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org        {   // negative, showbase
716d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::wstring v = L"-$1,234,567.89";
717d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            typedef input_iterator<const wchar_t*> I;
718d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::wstring ex;
719d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            std::ios_base::iostate err = std::ios_base::goodbit;
720d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            I iter = f.get(I(v.data()), I(v.data() + v.size()),
721d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org                                                true, ios, err, ex);
722d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            assert(iter.base() == v.data() + 1);
723d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            assert(err == std::ios_base::failbit);
724fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org            assert(ex == L"");
725a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        }
726ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org    }
727ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org}
728ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org