xref: /aosp_15_r20/external/double-conversion/test/cctest/test-conversions.cc (revision a6021da3bd53a1cb979b0905bbb837249345d1b1)
1*a6021da3SAndroid Build Coastguard Worker // Copyright 2012 the V8 project authors. All rights reserved.
2*a6021da3SAndroid Build Coastguard Worker // Redistribution and use in source and binary forms, with or without
3*a6021da3SAndroid Build Coastguard Worker // modification, are permitted provided that the following conditions are
4*a6021da3SAndroid Build Coastguard Worker // met:
5*a6021da3SAndroid Build Coastguard Worker //
6*a6021da3SAndroid Build Coastguard Worker //     * Redistributions of source code must retain the above copyright
7*a6021da3SAndroid Build Coastguard Worker //       notice, this list of conditions and the following disclaimer.
8*a6021da3SAndroid Build Coastguard Worker //     * Redistributions in binary form must reproduce the above
9*a6021da3SAndroid Build Coastguard Worker //       copyright notice, this list of conditions and the following
10*a6021da3SAndroid Build Coastguard Worker //       disclaimer in the documentation and/or other materials provided
11*a6021da3SAndroid Build Coastguard Worker //       with the distribution.
12*a6021da3SAndroid Build Coastguard Worker //     * Neither the name of Google Inc. nor the names of its
13*a6021da3SAndroid Build Coastguard Worker //       contributors may be used to endorse or promote products derived
14*a6021da3SAndroid Build Coastguard Worker //       from this software without specific prior written permission.
15*a6021da3SAndroid Build Coastguard Worker //
16*a6021da3SAndroid Build Coastguard Worker // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17*a6021da3SAndroid Build Coastguard Worker // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18*a6021da3SAndroid Build Coastguard Worker // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19*a6021da3SAndroid Build Coastguard Worker // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20*a6021da3SAndroid Build Coastguard Worker // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21*a6021da3SAndroid Build Coastguard Worker // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22*a6021da3SAndroid Build Coastguard Worker // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23*a6021da3SAndroid Build Coastguard Worker // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24*a6021da3SAndroid Build Coastguard Worker // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25*a6021da3SAndroid Build Coastguard Worker // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26*a6021da3SAndroid Build Coastguard Worker // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*a6021da3SAndroid Build Coastguard Worker 
28*a6021da3SAndroid Build Coastguard Worker #include <string.h>
29*a6021da3SAndroid Build Coastguard Worker 
30*a6021da3SAndroid Build Coastguard Worker #include "cctest.h"
31*a6021da3SAndroid Build Coastguard Worker #include "double-conversion/double-conversion.h"
32*a6021da3SAndroid Build Coastguard Worker #include "double-conversion/ieee.h"
33*a6021da3SAndroid Build Coastguard Worker #include "double-conversion/utils.h"
34*a6021da3SAndroid Build Coastguard Worker 
35*a6021da3SAndroid Build Coastguard Worker // DoubleToString is already tested in test-dtoa.cc.
36*a6021da3SAndroid Build Coastguard Worker 
37*a6021da3SAndroid Build Coastguard Worker using namespace double_conversion;
38*a6021da3SAndroid Build Coastguard Worker 
39*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToShortest)40*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToShortest) {
41*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 128;
42*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
43*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
44*a6021da3SAndroid Build Coastguard Worker   int flags = DoubleToStringConverter::UNIQUE_ZERO |
45*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
46*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc(flags, NULL, NULL, 'e', -6, 21, 0, 0);
47*a6021da3SAndroid Build Coastguard Worker 
48*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.0, &builder));
49*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
50*a6021da3SAndroid Build Coastguard Worker 
51*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
52*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(12345.0, &builder));
53*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("12345", builder.Finalize());
54*a6021da3SAndroid Build Coastguard Worker 
55*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
56*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(12345e23, &builder));
57*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2345e+27", builder.Finalize());
58*a6021da3SAndroid Build Coastguard Worker 
59*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
60*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(1e21, &builder));
61*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+21", builder.Finalize());
62*a6021da3SAndroid Build Coastguard Worker 
63*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
64*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(1e-23, &builder));
65*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-23", builder.Finalize());
66*a6021da3SAndroid Build Coastguard Worker 
67*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
68*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(1e20, &builder));
69*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000", builder.Finalize());
70*a6021da3SAndroid Build Coastguard Worker 
71*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
72*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(111111111111111111111.0, &builder));
73*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111111111111110000", builder.Finalize());
74*a6021da3SAndroid Build Coastguard Worker 
75*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
76*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(1111111111111111111111.0, &builder));
77*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111111111e+21", builder.Finalize());
78*a6021da3SAndroid Build Coastguard Worker 
79*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
80*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(11111111111111111111111.0, &builder));
81*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111111111e+22", builder.Finalize());
82*a6021da3SAndroid Build Coastguard Worker 
83*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
84*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.00001, &builder));
85*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00001", builder.Finalize());
86*a6021da3SAndroid Build Coastguard Worker 
87*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
88*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.000001, &builder));
89*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.000001", builder.Finalize());
90*a6021da3SAndroid Build Coastguard Worker 
91*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
92*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0000001, &builder));
93*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-7", builder.Finalize());
94*a6021da3SAndroid Build Coastguard Worker 
95*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
96*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0, &builder));
97*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
98*a6021da3SAndroid Build Coastguard Worker 
99*a6021da3SAndroid Build Coastguard Worker   // Test min_exponent_width
100*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::UNIQUE_ZERO |
101*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
102*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dcExpWidth2(flags, NULL, NULL, 'e', -4, 6, 0, 0, 2);
103*a6021da3SAndroid Build Coastguard Worker 
104*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
105*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(11111111111.0, &builder));
106*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111e+10", builder.Finalize());
107*a6021da3SAndroid Build Coastguard Worker 
108*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
109*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(1111111111.0, &builder));
110*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111111e+09", builder.Finalize());
111*a6021da3SAndroid Build Coastguard Worker 
112*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
113*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(1111111.0, &builder));
114*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e+06", builder.Finalize());
115*a6021da3SAndroid Build Coastguard Worker 
116*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
117*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(111111.0, &builder));
118*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111", builder.Finalize());
119*a6021da3SAndroid Build Coastguard Worker 
120*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
121*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(10000000000.0, &builder));
122*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+10", builder.Finalize());
123*a6021da3SAndroid Build Coastguard Worker 
124*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
125*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth2.ToShortest(1000000000.0, &builder));
126*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+09", builder.Finalize());
127*a6021da3SAndroid Build Coastguard Worker 
128*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dcExpWidth0(flags, NULL, NULL, 'e', -4, 6, 0, 0, 0);
129*a6021da3SAndroid Build Coastguard Worker 
130*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
131*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(11111111111.0, &builder));
132*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111e+10", builder.Finalize());
133*a6021da3SAndroid Build Coastguard Worker 
134*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
135*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(1111111111.0, &builder));
136*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111111e+9", builder.Finalize());
137*a6021da3SAndroid Build Coastguard Worker 
138*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
139*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(1111111.0, &builder));
140*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e+6", builder.Finalize());
141*a6021da3SAndroid Build Coastguard Worker 
142*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
143*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(111111.0, &builder));
144*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111", builder.Finalize());
145*a6021da3SAndroid Build Coastguard Worker 
146*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
147*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(10000000000.0, &builder));
148*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+10", builder.Finalize());
149*a6021da3SAndroid Build Coastguard Worker 
150*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
151*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth0.ToShortest(1000000000.0, &builder));
152*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+9", builder.Finalize());
153*a6021da3SAndroid Build Coastguard Worker 
154*a6021da3SAndroid Build Coastguard Worker   // Set min_exponent_width to 100 is equal to 5,
155*a6021da3SAndroid Build Coastguard Worker   // as kMaxExponentLength is defined to 5 in double-to-string.cc
156*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dcExpWidth100(flags, NULL, NULL, 'e', -4, 6, 0, 0, 100);
157*a6021da3SAndroid Build Coastguard Worker 
158*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
159*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(11111111111.0, &builder));
160*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111e+00010", builder.Finalize());
161*a6021da3SAndroid Build Coastguard Worker 
162*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
163*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(1111111111.0, &builder));
164*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111111e+00009", builder.Finalize());
165*a6021da3SAndroid Build Coastguard Worker 
166*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
167*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(1111111.0, &builder));
168*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e+00006", builder.Finalize());
169*a6021da3SAndroid Build Coastguard Worker 
170*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
171*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(111111.0, &builder));
172*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111", builder.Finalize());
173*a6021da3SAndroid Build Coastguard Worker 
174*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
175*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(10000000000.0, &builder));
176*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+00010", builder.Finalize());
177*a6021da3SAndroid Build Coastguard Worker 
178*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
179*a6021da3SAndroid Build Coastguard Worker   CHECK(dcExpWidth100.ToShortest(1000000000.0, &builder));
180*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+00009", builder.Finalize());
181*a6021da3SAndroid Build Coastguard Worker   // End of min_exponent_width testing
182*a6021da3SAndroid Build Coastguard Worker 
183*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
184*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc2(flags, NULL, NULL, 'e', -1, 1, 0, 0);
185*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
186*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortest(0.1, &builder));
187*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
188*a6021da3SAndroid Build Coastguard Worker 
189*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
190*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortest(0.01, &builder));
191*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-2", builder.Finalize());
192*a6021da3SAndroid Build Coastguard Worker 
193*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
194*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortest(1.0, &builder));
195*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1", builder.Finalize());
196*a6021da3SAndroid Build Coastguard Worker 
197*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
198*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortest(10.0, &builder));
199*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e1", builder.Finalize());
200*a6021da3SAndroid Build Coastguard Worker 
201*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
202*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortest(-0.0, &builder));
203*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0", builder.Finalize());
204*a6021da3SAndroid Build Coastguard Worker 
205*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
206*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
207*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc3(flags, NULL, NULL, 'E', -5, 5, 0, 0);
208*a6021da3SAndroid Build Coastguard Worker 
209*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
210*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortest(0.1, &builder));
211*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
212*a6021da3SAndroid Build Coastguard Worker 
213*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
214*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortest(1.0, &builder));
215*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0", builder.Finalize());
216*a6021da3SAndroid Build Coastguard Worker 
217*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
218*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortest(10000.0, &builder));
219*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("10000.0", builder.Finalize());
220*a6021da3SAndroid Build Coastguard Worker 
221*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
222*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortest(100000.0, &builder));
223*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1E5", builder.Finalize());
224*a6021da3SAndroid Build Coastguard Worker 
225*a6021da3SAndroid Build Coastguard Worker   // Test the examples in the comments of ToShortest.
226*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
227*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc4(flags, NULL, NULL, 'e', -6, 21, 0, 0);
228*a6021da3SAndroid Build Coastguard Worker 
229*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
230*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortest(0.000001, &builder));
231*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.000001", builder.Finalize());
232*a6021da3SAndroid Build Coastguard Worker 
233*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
234*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortest(0.0000001, &builder));
235*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-7", builder.Finalize());
236*a6021da3SAndroid Build Coastguard Worker 
237*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
238*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortest(111111111111111111111.0, &builder));
239*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111111111111110000", builder.Finalize());
240*a6021da3SAndroid Build Coastguard Worker 
241*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
242*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortest(100000000000000000000.0, &builder));
243*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000", builder.Finalize());
244*a6021da3SAndroid Build Coastguard Worker 
245*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
246*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortest(1111111111111111111111.0, &builder));
247*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111111111e+21", builder.Finalize());
248*a6021da3SAndroid Build Coastguard Worker 
249*a6021da3SAndroid Build Coastguard Worker   // Test special value handling.
250*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc5(flags, NULL, NULL, 'e', 0, 0, 0, 0);
251*a6021da3SAndroid Build Coastguard Worker 
252*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
253*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortest(Double::Infinity(), &builder));
254*a6021da3SAndroid Build Coastguard Worker 
255*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
256*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortest(-Double::Infinity(), &builder));
257*a6021da3SAndroid Build Coastguard Worker 
258*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
259*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortest(Double::NaN(), &builder));
260*a6021da3SAndroid Build Coastguard Worker 
261*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
262*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortest(-Double::NaN(), &builder));
263*a6021da3SAndroid Build Coastguard Worker 
264*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc6(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
265*a6021da3SAndroid Build Coastguard Worker 
266*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
267*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortest(Double::Infinity(), &builder));
268*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
269*a6021da3SAndroid Build Coastguard Worker 
270*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
271*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortest(-Double::Infinity(), &builder));
272*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
273*a6021da3SAndroid Build Coastguard Worker 
274*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
275*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortest(Double::NaN(), &builder));
276*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
277*a6021da3SAndroid Build Coastguard Worker 
278*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
279*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortest(-Double::NaN(), &builder));
280*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
281*a6021da3SAndroid Build Coastguard Worker }
282*a6021da3SAndroid Build Coastguard Worker 
283*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToShortestSingle)284*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToShortestSingle) {
285*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 128;
286*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
287*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
288*a6021da3SAndroid Build Coastguard Worker   int flags = DoubleToStringConverter::UNIQUE_ZERO |
289*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
290*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc(flags, NULL, NULL, 'e', -6, 21, 0, 0);
291*a6021da3SAndroid Build Coastguard Worker 
292*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(0.0f, &builder));
293*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
294*a6021da3SAndroid Build Coastguard Worker 
295*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
296*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(12345.0f, &builder));
297*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("12345", builder.Finalize());
298*a6021da3SAndroid Build Coastguard Worker 
299*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
300*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(12345e23f, &builder));
301*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2345e+27", builder.Finalize());
302*a6021da3SAndroid Build Coastguard Worker 
303*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
304*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(1e21f, &builder));
305*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+21", builder.Finalize());
306*a6021da3SAndroid Build Coastguard Worker 
307*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
308*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(1e20f, &builder));
309*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000", builder.Finalize());
310*a6021da3SAndroid Build Coastguard Worker 
311*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
312*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(111111111111111111111.0f, &builder));
313*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111110000000000000", builder.Finalize());
314*a6021da3SAndroid Build Coastguard Worker 
315*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
316*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(1111111111111111111111.0f, &builder));
317*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.11111114e+21", builder.Finalize());
318*a6021da3SAndroid Build Coastguard Worker 
319*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
320*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(11111111111111111111111.0f, &builder));
321*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111e+22", builder.Finalize());
322*a6021da3SAndroid Build Coastguard Worker 
323*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
324*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(-0.00001f, &builder));
325*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00001", builder.Finalize());
326*a6021da3SAndroid Build Coastguard Worker 
327*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
328*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(-0.000001f, &builder));
329*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.000001", builder.Finalize());
330*a6021da3SAndroid Build Coastguard Worker 
331*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
332*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(-0.0000001f, &builder));
333*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-7", builder.Finalize());
334*a6021da3SAndroid Build Coastguard Worker 
335*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
336*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortestSingle(-0.0f, &builder));
337*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
338*a6021da3SAndroid Build Coastguard Worker 
339*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
340*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc2(flags, NULL, NULL, 'e', -1, 1, 0, 0);
341*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
342*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortestSingle(0.1f, &builder));
343*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
344*a6021da3SAndroid Build Coastguard Worker 
345*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
346*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortestSingle(0.01f, &builder));
347*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-2", builder.Finalize());
348*a6021da3SAndroid Build Coastguard Worker 
349*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
350*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortestSingle(1.0f, &builder));
351*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1", builder.Finalize());
352*a6021da3SAndroid Build Coastguard Worker 
353*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
354*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortestSingle(10.0f, &builder));
355*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e1", builder.Finalize());
356*a6021da3SAndroid Build Coastguard Worker 
357*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
358*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToShortestSingle(-0.0f, &builder));
359*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0", builder.Finalize());
360*a6021da3SAndroid Build Coastguard Worker 
361*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
362*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
363*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc3(flags, NULL, NULL, 'E', -5, 5, 0, 0);
364*a6021da3SAndroid Build Coastguard Worker 
365*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
366*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortestSingle(0.1f, &builder));
367*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
368*a6021da3SAndroid Build Coastguard Worker 
369*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
370*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortestSingle(1.0f, &builder));
371*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0", builder.Finalize());
372*a6021da3SAndroid Build Coastguard Worker 
373*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
374*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortestSingle(10000.0f, &builder));
375*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("10000.0", builder.Finalize());
376*a6021da3SAndroid Build Coastguard Worker 
377*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
378*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToShortestSingle(100000.0f, &builder));
379*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1E5", builder.Finalize());
380*a6021da3SAndroid Build Coastguard Worker 
381*a6021da3SAndroid Build Coastguard Worker   // Test the examples in the comments of ToShortestSingle.
382*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
383*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc4(flags, NULL, NULL, 'e', -6, 21, 0, 0);
384*a6021da3SAndroid Build Coastguard Worker 
385*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
386*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortestSingle(0.000001f, &builder));
387*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.000001", builder.Finalize());
388*a6021da3SAndroid Build Coastguard Worker 
389*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
390*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortestSingle(0.0000001f, &builder));
391*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-7", builder.Finalize());
392*a6021da3SAndroid Build Coastguard Worker 
393*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
394*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortestSingle(111111111111111111111.0f, &builder));
395*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111110000000000000", builder.Finalize());
396*a6021da3SAndroid Build Coastguard Worker 
397*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
398*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortestSingle(100000000000000000000.0f, &builder));
399*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000", builder.Finalize());
400*a6021da3SAndroid Build Coastguard Worker 
401*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
402*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToShortestSingle(1111111111111111111111.0f, &builder));
403*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.11111114e+21", builder.Finalize());
404*a6021da3SAndroid Build Coastguard Worker 
405*a6021da3SAndroid Build Coastguard Worker   // Test special value handling.
406*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc5(flags, NULL, NULL, 'e', 0, 0, 0, 0);
407*a6021da3SAndroid Build Coastguard Worker 
408*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
409*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortestSingle(Single::Infinity(), &builder));
410*a6021da3SAndroid Build Coastguard Worker 
411*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
412*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortestSingle(-Single::Infinity(), &builder));
413*a6021da3SAndroid Build Coastguard Worker 
414*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
415*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortestSingle(Single::NaN(), &builder));
416*a6021da3SAndroid Build Coastguard Worker 
417*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
418*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc5.ToShortestSingle(-Single::NaN(), &builder));
419*a6021da3SAndroid Build Coastguard Worker 
420*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc6(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
421*a6021da3SAndroid Build Coastguard Worker 
422*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
423*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortestSingle(Single::Infinity(), &builder));
424*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
425*a6021da3SAndroid Build Coastguard Worker 
426*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
427*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortestSingle(-Single::Infinity(), &builder));
428*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
429*a6021da3SAndroid Build Coastguard Worker 
430*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
431*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortestSingle(Single::NaN(), &builder));
432*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
433*a6021da3SAndroid Build Coastguard Worker 
434*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
435*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToShortestSingle(-Single::NaN(), &builder));
436*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
437*a6021da3SAndroid Build Coastguard Worker }
438*a6021da3SAndroid Build Coastguard Worker 
439*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToFixed)440*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToFixed) {
441*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 168;
442*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
443*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
444*a6021da3SAndroid Build Coastguard Worker   int flags = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
445*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::UNIQUE_ZERO;
446*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc(flags, "Infinity", "NaN", 'e',
447*a6021da3SAndroid Build Coastguard Worker                              0, 0, 0, 0);  // Padding zeroes.
448*a6021da3SAndroid Build Coastguard Worker 
449*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0, 0, &builder));
450*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
451*a6021da3SAndroid Build Coastguard Worker 
452*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
453*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.0, 0, &builder));
454*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
455*a6021da3SAndroid Build Coastguard Worker 
456*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
457*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.0, 1, &builder));
458*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
459*a6021da3SAndroid Build Coastguard Worker 
460*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
461*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.0, 1, &builder));
462*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
463*a6021da3SAndroid Build Coastguard Worker 
464*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(DoubleToStringConverter::kMaxFixedDigitsBeforePoint == 60);
465*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(DoubleToStringConverter::kMaxFixedDigitsAfterPoint == 100);
466*a6021da3SAndroid Build Coastguard Worker 
467*a6021da3SAndroid Build Coastguard Worker   // Most of the 100 digit tests were copied from
468*a6021da3SAndroid Build Coastguard Worker   // https://searchfox.org/mozilla-central/source/js/src/tests/non262/Number/toFixed-values.js.
469*a6021da3SAndroid Build Coastguard Worker 
470*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
471*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(
472*a6021da3SAndroid Build Coastguard Worker       0.0, DoubleToStringConverter::kMaxFixedDigitsAfterPoint, &builder));
473*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
474*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
475*a6021da3SAndroid Build Coastguard Worker 
476*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
477*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(
478*a6021da3SAndroid Build Coastguard Worker       9e59, DoubleToStringConverter::kMaxFixedDigitsAfterPoint, &builder));
479*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("899999999999999918767229449717619953810131273674690656206848."
480*a6021da3SAndroid Build Coastguard Worker            "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
481*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
482*a6021da3SAndroid Build Coastguard Worker 
483*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
484*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(
485*a6021da3SAndroid Build Coastguard Worker       -9e59, DoubleToStringConverter::kMaxFixedDigitsAfterPoint, &builder));
486*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-899999999999999918767229449717619953810131273674690656206848."
487*a6021da3SAndroid Build Coastguard Worker            "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
488*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
489*a6021da3SAndroid Build Coastguard Worker 
490*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
491*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(
492*a6021da3SAndroid Build Coastguard Worker       1e-100, DoubleToStringConverter::kMaxFixedDigitsAfterPoint, &builder));
493*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
494*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
495*a6021da3SAndroid Build Coastguard Worker 
496*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
497*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.3000000000000000444089209850062616169452667236328125,
498*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
499*a6021da3SAndroid Build Coastguard Worker                    &builder));
500*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.3000000000000000444089209850062616169452667236328125000000000000000000000000000000000000000000000000",
501*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
502*a6021da3SAndroid Build Coastguard Worker 
503*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
504*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1.5e-100,
505*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
506*a6021da3SAndroid Build Coastguard Worker                    &builder));
507*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002",
508*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
509*a6021da3SAndroid Build Coastguard Worker 
510*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
511*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1.15e-99,  // In reality: 1.14999999999999992147301128036734...
512*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
513*a6021da3SAndroid Build Coastguard Worker                    &builder));
514*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011",
515*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
516*a6021da3SAndroid Build Coastguard Worker 
517*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
518*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(3.141592653589793,
519*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
520*a6021da3SAndroid Build Coastguard Worker                    &builder));
521*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000",
522*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
523*a6021da3SAndroid Build Coastguard Worker 
524*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
525*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1.0,
526*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
527*a6021da3SAndroid Build Coastguard Worker                    &builder));
528*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
529*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
530*a6021da3SAndroid Build Coastguard Worker 
531*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
532*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-123456.78,
533*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
534*a6021da3SAndroid Build Coastguard Worker                    &builder));
535*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000000000",
536*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
537*a6021da3SAndroid Build Coastguard Worker 
538*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
539*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(123456.78,
540*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
541*a6021da3SAndroid Build Coastguard Worker                    &builder));
542*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000000000",
543*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
544*a6021da3SAndroid Build Coastguard Worker 
545*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
546*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(100000000000000000000.0,
547*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
548*a6021da3SAndroid Build Coastguard Worker                    &builder));
549*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
550*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
551*a6021da3SAndroid Build Coastguard Worker 
552*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
553*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-100000000000000000000.0,
554*a6021da3SAndroid Build Coastguard Worker                    DoubleToStringConverter::kMaxFixedDigitsAfterPoint,
555*a6021da3SAndroid Build Coastguard Worker                    &builder));
556*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
557*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
558*a6021da3SAndroid Build Coastguard Worker 
559*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
560*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc.ToFixed(
561*a6021da3SAndroid Build Coastguard Worker       1e60, DoubleToStringConverter::kMaxFixedDigitsAfterPoint, &builder));
562*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, builder.position());
563*a6021da3SAndroid Build Coastguard Worker 
564*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
565*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc.ToFixed(
566*a6021da3SAndroid Build Coastguard Worker       9e59, DoubleToStringConverter::kMaxFixedDigitsAfterPoint + 1, &builder));
567*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, builder.position());
568*a6021da3SAndroid Build Coastguard Worker 
569*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
570*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(3.0, 0, &builder));
571*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3", builder.Finalize());
572*a6021da3SAndroid Build Coastguard Worker 
573*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
574*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(3.23, 1, &builder));
575*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.2", builder.Finalize());
576*a6021da3SAndroid Build Coastguard Worker 
577*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
578*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(3.23, 3, &builder));
579*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.230", builder.Finalize());
580*a6021da3SAndroid Build Coastguard Worker 
581*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
582*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0323, 2, &builder));
583*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.03", builder.Finalize());
584*a6021da3SAndroid Build Coastguard Worker 
585*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
586*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0373, 2, &builder));
587*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.04", builder.Finalize());
588*a6021da3SAndroid Build Coastguard Worker 
589*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
590*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0000373, 2, &builder));
591*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00", builder.Finalize());
592*a6021da3SAndroid Build Coastguard Worker 
593*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
594*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1.5, 0, &builder));
595*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2", builder.Finalize());
596*a6021da3SAndroid Build Coastguard Worker 
597*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
598*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(2.5, 0, &builder));
599*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3", builder.Finalize());
600*a6021da3SAndroid Build Coastguard Worker 
601*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
602*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(3.5, 0, &builder));
603*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("4", builder.Finalize());
604*a6021da3SAndroid Build Coastguard Worker 
605*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
606*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.15, 1, &builder));
607*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
608*a6021da3SAndroid Build Coastguard Worker 
609*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
610*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.25, 1, &builder));
611*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.3", builder.Finalize());
612*a6021da3SAndroid Build Coastguard Worker 
613*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
614*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.35, 1, &builder));
615*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.3", builder.Finalize());
616*a6021da3SAndroid Build Coastguard Worker 
617*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
618*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.45, 1, &builder));
619*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.5", builder.Finalize());
620*a6021da3SAndroid Build Coastguard Worker 
621*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
622*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.55, 1, &builder));
623*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.6", builder.Finalize());
624*a6021da3SAndroid Build Coastguard Worker 
625*a6021da3SAndroid Build Coastguard Worker   // Test positive/negative zeroes.
626*a6021da3SAndroid Build Coastguard Worker   int flags2 = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN;
627*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc2(flags2, "Infinity", "NaN", 'e',
628*a6021da3SAndroid Build Coastguard Worker                               0, 0, 0, 0);  // Padding zeroes.
629*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
630*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToFixed(0.0, 1, &builder));
631*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
632*a6021da3SAndroid Build Coastguard Worker 
633*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
634*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToFixed(-0.0, 1, &builder));
635*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0", builder.Finalize());
636*a6021da3SAndroid Build Coastguard Worker 
637*a6021da3SAndroid Build Coastguard Worker   // Verify the trailing dot is emitted.
638*a6021da3SAndroid Build Coastguard Worker   int flags3 = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
639*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT;
640*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc3(flags3, "Infinity", "NaN", 'e',
641*a6021da3SAndroid Build Coastguard Worker                               0, 0, 0, 0);  // Padding zeroes.
642*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
643*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToFixed(0.0, 0, &builder));
644*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.", builder.Finalize());
645*a6021da3SAndroid Build Coastguard Worker 
646*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
647*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToFixed(-0.0, 0, &builder));
648*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.", builder.Finalize());
649*a6021da3SAndroid Build Coastguard Worker 
650*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
651*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToFixed(1.0, 0, &builder));
652*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.", builder.Finalize());
653*a6021da3SAndroid Build Coastguard Worker 
654*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
655*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToFixed(-1.0, 0, &builder));
656*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.", builder.Finalize());
657*a6021da3SAndroid Build Coastguard Worker 
658*a6021da3SAndroid Build Coastguard Worker   // Verify no trailing zero is emitted, even if the configuration is set.
659*a6021da3SAndroid Build Coastguard Worker   // The given parameter takes precedence.
660*a6021da3SAndroid Build Coastguard Worker   int flags4 = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
661*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
662*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
663*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc4(flags4, "Infinity", "NaN", 'e',
664*a6021da3SAndroid Build Coastguard Worker                               0, 0, 0, 0);  // Padding zeroes.
665*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
666*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToFixed(0.0, 0, &builder));
667*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
668*a6021da3SAndroid Build Coastguard Worker 
669*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
670*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToFixed(-0.0, 0, &builder));
671*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0", builder.Finalize());
672*a6021da3SAndroid Build Coastguard Worker 
673*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
674*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToFixed(1.0, 0, &builder));
675*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0", builder.Finalize());
676*a6021da3SAndroid Build Coastguard Worker 
677*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
678*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToFixed(-1.0, 0, &builder));
679*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.0", builder.Finalize());
680*a6021da3SAndroid Build Coastguard Worker 
681*a6021da3SAndroid Build Coastguard Worker   // Test the examples in the comments of ToFixed.
682*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
683*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc5(flags, NULL, NULL, 'e', 0, 0, 0, 0);
684*a6021da3SAndroid Build Coastguard Worker 
685*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
686*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(3.12, 1, &builder));
687*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.1", builder.Finalize());
688*a6021da3SAndroid Build Coastguard Worker 
689*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
690*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(3.1415, 3, &builder));
691*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.142", builder.Finalize());
692*a6021da3SAndroid Build Coastguard Worker 
693*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
694*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(1234.56789, 4, &builder));
695*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1234.5679", builder.Finalize());
696*a6021da3SAndroid Build Coastguard Worker 
697*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
698*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(1.23, 5, &builder));
699*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.23000", builder.Finalize());
700*a6021da3SAndroid Build Coastguard Worker 
701*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
702*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(0.1, 4, &builder));
703*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1000", builder.Finalize());
704*a6021da3SAndroid Build Coastguard Worker 
705*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
706*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(1e30, 2, &builder));
707*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000000000000000019884624838656.00", builder.Finalize());
708*a6021da3SAndroid Build Coastguard Worker 
709*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
710*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(0.1, 30, &builder));
711*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.100000000000000005551115123126", builder.Finalize());
712*a6021da3SAndroid Build Coastguard Worker 
713*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
714*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(0.1, 100, &builder));
715*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1000000000000000055511151231257827021181583404541015625000000000000000000000000000000000000000000000", builder.Finalize());
716*a6021da3SAndroid Build Coastguard Worker 
717*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
718*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(0.1, 17, &builder));
719*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.10000000000000001", builder.Finalize());
720*a6021da3SAndroid Build Coastguard Worker 
721*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
722*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(123.45, 0, &builder));
723*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123", builder.Finalize());
724*a6021da3SAndroid Build Coastguard Worker 
725*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
726*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToFixed(0.678, 0, &builder));
727*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1", builder.Finalize());
728*a6021da3SAndroid Build Coastguard Worker 
729*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT;
730*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc6(flags, NULL, NULL, 'e', 0, 0, 0, 0);
731*a6021da3SAndroid Build Coastguard Worker 
732*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
733*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToFixed(123.45, 0, &builder));
734*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123.", builder.Finalize());
735*a6021da3SAndroid Build Coastguard Worker 
736*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
737*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToFixed(0.678, 0, &builder));
738*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.", builder.Finalize());
739*a6021da3SAndroid Build Coastguard Worker 
740*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
741*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
742*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc7(flags, NULL, NULL, 'e', 0, 0, 0, 0);
743*a6021da3SAndroid Build Coastguard Worker 
744*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
745*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToFixed(123.45, 0, &builder));
746*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123.0", builder.Finalize());
747*a6021da3SAndroid Build Coastguard Worker 
748*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
749*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToFixed(0.678, 0, &builder));
750*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0", builder.Finalize());
751*a6021da3SAndroid Build Coastguard Worker 
752*a6021da3SAndroid Build Coastguard Worker   // Test special value handling.
753*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc8(flags, NULL, NULL, 'e', 0, 0, 0, 0);
754*a6021da3SAndroid Build Coastguard Worker 
755*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
756*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToFixed(Double::Infinity(), 1, &builder));
757*a6021da3SAndroid Build Coastguard Worker 
758*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
759*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToFixed(-Double::Infinity(), 1, &builder));
760*a6021da3SAndroid Build Coastguard Worker 
761*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
762*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToFixed(Double::NaN(), 1, &builder));
763*a6021da3SAndroid Build Coastguard Worker 
764*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
765*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToFixed(-Double::NaN(), 1, &builder));
766*a6021da3SAndroid Build Coastguard Worker 
767*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc9(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
768*a6021da3SAndroid Build Coastguard Worker 
769*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
770*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToFixed(Double::Infinity(), 1, &builder));
771*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
772*a6021da3SAndroid Build Coastguard Worker 
773*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
774*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToFixed(-Double::Infinity(), 1, &builder));
775*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
776*a6021da3SAndroid Build Coastguard Worker 
777*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
778*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToFixed(Double::NaN(), 1, &builder));
779*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
780*a6021da3SAndroid Build Coastguard Worker 
781*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
782*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToFixed(-Double::NaN(), 1, &builder));
783*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
784*a6021da3SAndroid Build Coastguard Worker }
785*a6021da3SAndroid Build Coastguard Worker 
786*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToExponential)787*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToExponential) {
788*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 256;
789*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
790*a6021da3SAndroid Build Coastguard Worker   int flags = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
791*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::UNIQUE_ZERO;
792*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
793*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
794*a6021da3SAndroid Build Coastguard Worker 
795*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
796*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, 5, &builder));
797*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00000e+0", builder.Finalize());
798*a6021da3SAndroid Build Coastguard Worker 
799*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
800*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, 0, &builder));
801*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0e+0", builder.Finalize());
802*a6021da3SAndroid Build Coastguard Worker 
803*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
804*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, 1, &builder));
805*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0e+0", builder.Finalize());
806*a6021da3SAndroid Build Coastguard Worker 
807*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
808*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.123456, 5, &builder));
809*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.23456e-1", builder.Finalize());
810*a6021da3SAndroid Build Coastguard Worker 
811*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
812*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.2, 1, &builder));
813*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e+0", builder.Finalize());
814*a6021da3SAndroid Build Coastguard Worker 
815*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
816*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.0, 1, &builder));
817*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0e+0", builder.Finalize());
818*a6021da3SAndroid Build Coastguard Worker 
819*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
820*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, 2, &builder));
821*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00e+0", builder.Finalize());
822*a6021da3SAndroid Build Coastguard Worker 
823*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
824*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.0, 2, &builder));
825*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00e+0", builder.Finalize());
826*a6021da3SAndroid Build Coastguard Worker 
827*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(DoubleToStringConverter::kMaxExponentialDigits == 120);
828*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
829*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(
830*a6021da3SAndroid Build Coastguard Worker       0.0, DoubleToStringConverter::kMaxExponentialDigits, &builder));
831*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00000000000000000000000000000000000000000000000000000000000"
832*a6021da3SAndroid Build Coastguard Worker            "0000000000000000000000000000000000000000000000000000000000000e+0",
833*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
834*a6021da3SAndroid Build Coastguard Worker 
835*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
836*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(
837*a6021da3SAndroid Build Coastguard Worker       9e59, DoubleToStringConverter::kMaxExponentialDigits, &builder));
838*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("8.99999999999999918767229449717619953810131273674690656206848"
839*a6021da3SAndroid Build Coastguard Worker            "0000000000000000000000000000000000000000000000000000000000000e+59",
840*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
841*a6021da3SAndroid Build Coastguard Worker 
842*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
843*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(
844*a6021da3SAndroid Build Coastguard Worker       -9e59, DoubleToStringConverter::kMaxExponentialDigits, &builder));
845*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-8.99999999999999918767229449717619953810131273674690656206848"
846*a6021da3SAndroid Build Coastguard Worker            "0000000000000000000000000000000000000000000000000000000000000e+59",
847*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
848*a6021da3SAndroid Build Coastguard Worker 
849*a6021da3SAndroid Build Coastguard Worker   const double max_double = 1.7976931348623157e308;
850*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
851*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(
852*a6021da3SAndroid Build Coastguard Worker       max_double, DoubleToStringConverter::kMaxExponentialDigits, &builder));
853*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.79769313486231570814527423731704356798070567525844996598917"
854*a6021da3SAndroid Build Coastguard Worker            "4768031572607800285387605895586327668781715404589535143824642e+308",
855*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
856*a6021da3SAndroid Build Coastguard Worker 
857*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
858*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.000001, 2, &builder));
859*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00e-6", builder.Finalize());
860*a6021da3SAndroid Build Coastguard Worker 
861*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
862*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0000001, 2, &builder));
863*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00e-7", builder.Finalize());
864*a6021da3SAndroid Build Coastguard Worker 
865*a6021da3SAndroid Build Coastguard Worker   // Test the examples in the comments of ToExponential.
866*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
867*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc2(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
868*a6021da3SAndroid Build Coastguard Worker 
869*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
870*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(3.12, 1, &builder));
871*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.1e0", builder.Finalize());
872*a6021da3SAndroid Build Coastguard Worker 
873*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
874*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(5.0, 3, &builder));
875*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("5.000e0", builder.Finalize());
876*a6021da3SAndroid Build Coastguard Worker 
877*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
878*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(0.001, 2, &builder));
879*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00e-3", builder.Finalize());
880*a6021da3SAndroid Build Coastguard Worker 
881*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
882*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(3.1415, -1, &builder));
883*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.1415e0", builder.Finalize());
884*a6021da3SAndroid Build Coastguard Worker 
885*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
886*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(3.1415, 4, &builder));
887*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.1415e0", builder.Finalize());
888*a6021da3SAndroid Build Coastguard Worker 
889*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
890*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(3.1415, 3, &builder));
891*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("3.142e0", builder.Finalize());
892*a6021da3SAndroid Build Coastguard Worker 
893*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
894*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(123456789000000, 3, &builder));
895*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.235e14", builder.Finalize());
896*a6021da3SAndroid Build Coastguard Worker 
897*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
898*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(1000000000000000019884624838656.0, -1, &builder));
899*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e30", builder.Finalize());
900*a6021da3SAndroid Build Coastguard Worker 
901*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
902*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(1000000000000000019884624838656.0, 32, &builder));
903*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00000000000000001988462483865600e30", builder.Finalize());
904*a6021da3SAndroid Build Coastguard Worker 
905*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
906*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToExponential(1234, 0, &builder));
907*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e3", builder.Finalize());
908*a6021da3SAndroid Build Coastguard Worker 
909*a6021da3SAndroid Build Coastguard Worker   // Test special value handling.
910*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc3(flags, NULL, NULL, 'e', 0, 0, 0, 0);
911*a6021da3SAndroid Build Coastguard Worker 
912*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
913*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc3.ToExponential(Double::Infinity(), 1, &builder));
914*a6021da3SAndroid Build Coastguard Worker 
915*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
916*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc3.ToExponential(-Double::Infinity(), 1, &builder));
917*a6021da3SAndroid Build Coastguard Worker 
918*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
919*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc3.ToExponential(Double::NaN(), 1, &builder));
920*a6021da3SAndroid Build Coastguard Worker 
921*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
922*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc3.ToExponential(-Double::NaN(), 1, &builder));
923*a6021da3SAndroid Build Coastguard Worker 
924*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc4(flags, "Infinity", "NaN", 'e', 0, 0, 0, 0);
925*a6021da3SAndroid Build Coastguard Worker 
926*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
927*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToExponential(Double::Infinity(), 1, &builder));
928*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
929*a6021da3SAndroid Build Coastguard Worker 
930*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
931*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToExponential(-Double::Infinity(), 1, &builder));
932*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
933*a6021da3SAndroid Build Coastguard Worker 
934*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
935*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToExponential(Double::NaN(), 1, &builder));
936*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
937*a6021da3SAndroid Build Coastguard Worker 
938*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
939*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToExponential(-Double::NaN(), 1, &builder));
940*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
941*a6021da3SAndroid Build Coastguard Worker 
942*a6021da3SAndroid Build Coastguard Worker   // Test min_exponent_width
943*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc5(flags, NULL, NULL, 'e', 0, 0, 0, 0, 2);
944*a6021da3SAndroid Build Coastguard Worker 
945*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
946*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(11111111111.0, 6, &builder));
947*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e10", builder.Finalize());
948*a6021da3SAndroid Build Coastguard Worker 
949*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
950*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(1111111111.0, 6, &builder));
951*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e09", builder.Finalize());
952*a6021da3SAndroid Build Coastguard Worker 
953*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
954*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(1111111.0, 6, &builder));
955*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.111111e06", builder.Finalize());
956*a6021da3SAndroid Build Coastguard Worker 
957*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
958*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(10000000000.0, 6, &builder));
959*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.000000e10", builder.Finalize());
960*a6021da3SAndroid Build Coastguard Worker 
961*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
962*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(1000000000.0, 6, &builder));
963*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.000000e09", builder.Finalize());
964*a6021da3SAndroid Build Coastguard Worker 
965*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
966*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToExponential(1.0, 6, &builder));
967*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.000000e00", builder.Finalize());
968*a6021da3SAndroid Build Coastguard Worker }
969*a6021da3SAndroid Build Coastguard Worker 
970*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToPrecision)971*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToPrecision) {
972*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 256;
973*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
974*a6021da3SAndroid Build Coastguard Worker   int flags = DoubleToStringConverter::EMIT_POSITIVE_EXPONENT_SIGN |
975*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::UNIQUE_ZERO;
976*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
977*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc(flags, "Infinity", "NaN", 'e',
978*a6021da3SAndroid Build Coastguard Worker                              0, 0,   // Padding zeroes for shortest mode.
979*a6021da3SAndroid Build Coastguard Worker                              6, 0);  // Padding zeroes for precision mode.
980*a6021da3SAndroid Build Coastguard Worker 
981*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(DoubleToStringConverter::kMinPrecisionDigits == 1);
982*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.0, 1, &builder));
983*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
984*a6021da3SAndroid Build Coastguard Worker 
985*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
986*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-0.0, 1, &builder));
987*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
988*a6021da3SAndroid Build Coastguard Worker 
989*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
990*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.0, 2, &builder));
991*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
992*a6021da3SAndroid Build Coastguard Worker 
993*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
994*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-0.0, 2, &builder));
995*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
996*a6021da3SAndroid Build Coastguard Worker 
997*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(DoubleToStringConverter::kMaxPrecisionDigits == 120);
998*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
999*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(
1000*a6021da3SAndroid Build Coastguard Worker       0.0, DoubleToStringConverter::kMaxPrecisionDigits, &builder));
1001*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00000000000000000000000000000000000000000000000000000000000"
1002*a6021da3SAndroid Build Coastguard Worker            "000000000000000000000000000000000000000000000000000000000000",
1003*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
1004*a6021da3SAndroid Build Coastguard Worker 
1005*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1006*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(
1007*a6021da3SAndroid Build Coastguard Worker       9e59, DoubleToStringConverter::kMaxPrecisionDigits, &builder));
1008*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("899999999999999918767229449717619953810131273674690656206848."
1009*a6021da3SAndroid Build Coastguard Worker            "000000000000000000000000000000000000000000000000000000000000",
1010*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
1011*a6021da3SAndroid Build Coastguard Worker 
1012*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1013*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(
1014*a6021da3SAndroid Build Coastguard Worker       -9e59, DoubleToStringConverter::kMaxPrecisionDigits, &builder));
1015*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-899999999999999918767229449717619953810131273674690656206848."
1016*a6021da3SAndroid Build Coastguard Worker            "000000000000000000000000000000000000000000000000000000000000",
1017*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
1018*a6021da3SAndroid Build Coastguard Worker 
1019*a6021da3SAndroid Build Coastguard Worker   const double max_double = 1.7976931348623157e308;
1020*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1021*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(
1022*a6021da3SAndroid Build Coastguard Worker       max_double, DoubleToStringConverter::kMaxPrecisionDigits, &builder));
1023*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.79769313486231570814527423731704356798070567525844996598917"
1024*a6021da3SAndroid Build Coastguard Worker            "476803157260780028538760589558632766878171540458953514382464e+308",
1025*a6021da3SAndroid Build Coastguard Worker            builder.Finalize());
1026*a6021da3SAndroid Build Coastguard Worker 
1027*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1028*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.000001, 2, &builder));
1029*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000010", builder.Finalize());
1030*a6021da3SAndroid Build Coastguard Worker 
1031*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1032*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.0000001, 2, &builder));
1033*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0e-7", builder.Finalize());
1034*a6021da3SAndroid Build Coastguard Worker 
1035*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
1036*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc2(flags, NULL, NULL, 'e', 0, 0, 0, 1);
1037*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1038*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToPrecision(230.0, 2, &builder));
1039*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230", builder.Finalize());
1040*a6021da3SAndroid Build Coastguard Worker 
1041*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1042*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToPrecision(23.0, 2, &builder));
1043*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("23", builder.Finalize());
1044*a6021da3SAndroid Build Coastguard Worker 
1045*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1046*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToPrecision(2.30, 2, &builder));
1047*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3", builder.Finalize());
1048*a6021da3SAndroid Build Coastguard Worker 
1049*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1050*a6021da3SAndroid Build Coastguard Worker   CHECK(dc2.ToPrecision(2300.0, 2, &builder));
1051*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e3", builder.Finalize());
1052*a6021da3SAndroid Build Coastguard Worker 
1053*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT;
1054*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc3(flags, NULL, NULL, 'e', 0, 0, 0, 1);
1055*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1056*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToPrecision(230.0, 2, &builder));
1057*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230.", builder.Finalize());
1058*a6021da3SAndroid Build Coastguard Worker 
1059*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1060*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToPrecision(23.0, 2, &builder));
1061*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("23.", builder.Finalize());
1062*a6021da3SAndroid Build Coastguard Worker 
1063*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1064*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToPrecision(2.30, 2, &builder));
1065*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3", builder.Finalize());
1066*a6021da3SAndroid Build Coastguard Worker 
1067*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1068*a6021da3SAndroid Build Coastguard Worker   CHECK(dc3.ToPrecision(2300.0, 2, &builder));
1069*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e3", builder.Finalize());
1070*a6021da3SAndroid Build Coastguard Worker 
1071*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
1072*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
1073*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc4(flags, NULL, NULL, 'e', 0, 0, 0, 1);
1074*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1075*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToPrecision(230.0, 2, &builder));
1076*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e2", builder.Finalize());
1077*a6021da3SAndroid Build Coastguard Worker 
1078*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1079*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToPrecision(23.0, 2, &builder));
1080*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("23.0", builder.Finalize());
1081*a6021da3SAndroid Build Coastguard Worker 
1082*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1083*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToPrecision(2.30, 2, &builder));
1084*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3", builder.Finalize());
1085*a6021da3SAndroid Build Coastguard Worker 
1086*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1087*a6021da3SAndroid Build Coastguard Worker   CHECK(dc4.ToPrecision(2300.0, 2, &builder));
1088*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e3", builder.Finalize());
1089*a6021da3SAndroid Build Coastguard Worker 
1090*a6021da3SAndroid Build Coastguard Worker   // Test the examples in the comments of ToPrecision.
1091*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
1092*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc5(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1093*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT;
1094*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc6(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1095*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
1096*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
1097*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc7(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1098*a6021da3SAndroid Build Coastguard Worker 
1099*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1100*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(0.0000012345, 2, &builder));
1101*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0000012", builder.Finalize());
1102*a6021da3SAndroid Build Coastguard Worker 
1103*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1104*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(0.00000012345, 2, &builder));
1105*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e-7", builder.Finalize());
1106*a6021da3SAndroid Build Coastguard Worker 
1107*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1108*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(230.0, 2, &builder));
1109*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230", builder.Finalize());
1110*a6021da3SAndroid Build Coastguard Worker 
1111*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1112*a6021da3SAndroid Build Coastguard Worker   CHECK(dc6.ToPrecision(230.0, 2, &builder));
1113*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230.", builder.Finalize());
1114*a6021da3SAndroid Build Coastguard Worker 
1115*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1116*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToPrecision(230.0, 2, &builder));
1117*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e2", builder.Finalize());
1118*a6021da3SAndroid Build Coastguard Worker 
1119*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_FLAGS;
1120*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc8(flags, NULL, NULL, 'e', 0, 0, 6, 3);
1121*a6021da3SAndroid Build Coastguard Worker 
1122*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1123*a6021da3SAndroid Build Coastguard Worker   CHECK(dc8.ToPrecision(123450.0, 6, &builder));
1124*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123450", builder.Finalize());
1125*a6021da3SAndroid Build Coastguard Worker 
1126*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1127*a6021da3SAndroid Build Coastguard Worker   CHECK(dc8.ToPrecision(123450.0, 5, &builder));
1128*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123450", builder.Finalize());
1129*a6021da3SAndroid Build Coastguard Worker 
1130*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1131*a6021da3SAndroid Build Coastguard Worker   CHECK(dc8.ToPrecision(123450.0, 4, &builder));
1132*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123500", builder.Finalize());
1133*a6021da3SAndroid Build Coastguard Worker 
1134*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1135*a6021da3SAndroid Build Coastguard Worker   CHECK(dc8.ToPrecision(123450.0, 3, &builder));
1136*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123000", builder.Finalize());
1137*a6021da3SAndroid Build Coastguard Worker 
1138*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1139*a6021da3SAndroid Build Coastguard Worker   CHECK(dc8.ToPrecision(123450.0, 2, &builder));
1140*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e5", builder.Finalize());
1141*a6021da3SAndroid Build Coastguard Worker 
1142*a6021da3SAndroid Build Coastguard Worker   // Test special value handling.
1143*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1144*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToPrecision(Double::Infinity(), 1, &builder));
1145*a6021da3SAndroid Build Coastguard Worker 
1146*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1147*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToPrecision(-Double::Infinity(), 1, &builder));
1148*a6021da3SAndroid Build Coastguard Worker 
1149*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1150*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToPrecision(Double::NaN(), 1, &builder));
1151*a6021da3SAndroid Build Coastguard Worker 
1152*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1153*a6021da3SAndroid Build Coastguard Worker   CHECK(!dc8.ToPrecision(-Double::NaN(), 1, &builder));
1154*a6021da3SAndroid Build Coastguard Worker 
1155*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1156*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToPrecision(Double::Infinity(), 1, &builder));
1157*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
1158*a6021da3SAndroid Build Coastguard Worker 
1159*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1160*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToPrecision(-Double::Infinity(), 1, &builder));
1161*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
1162*a6021da3SAndroid Build Coastguard Worker 
1163*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1164*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToPrecision(Double::NaN(), 1, &builder));
1165*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1166*a6021da3SAndroid Build Coastguard Worker 
1167*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1168*a6021da3SAndroid Build Coastguard Worker   CHECK(dc7.ToPrecision(-Double::NaN(), 1, &builder));
1169*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1170*a6021da3SAndroid Build Coastguard Worker 
1171*a6021da3SAndroid Build Coastguard Worker   // Test NO_TRAILING_ZERO and its interaction with other flags.
1172*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_TRAILING_ZERO;
1173*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc9(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1174*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_TRAILING_ZERO |
1175*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT;
1176*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc10(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1177*a6021da3SAndroid Build Coastguard Worker   flags = DoubleToStringConverter::NO_TRAILING_ZERO |
1178*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_DECIMAL_POINT |
1179*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EMIT_TRAILING_ZERO_AFTER_POINT;
1180*a6021da3SAndroid Build Coastguard Worker   DoubleToStringConverter dc11(flags, "Infinity", "NaN", 'e', 0, 0, 6, 1);
1181*a6021da3SAndroid Build Coastguard Worker 
1182*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1183*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToPrecision(230.001, 5, &builder));
1184*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230", builder.Finalize());
1185*a6021da3SAndroid Build Coastguard Worker 
1186*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1187*a6021da3SAndroid Build Coastguard Worker   CHECK(dc10.ToPrecision(230.001, 5, &builder));
1188*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230.", builder.Finalize());
1189*a6021da3SAndroid Build Coastguard Worker 
1190*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1191*a6021da3SAndroid Build Coastguard Worker   CHECK(dc11.ToPrecision(230.001, 5, &builder));
1192*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230.0", builder.Finalize());
1193*a6021da3SAndroid Build Coastguard Worker 
1194*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1195*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(230.001, 5, &builder));
1196*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("230.00", builder.Finalize());
1197*a6021da3SAndroid Build Coastguard Worker 
1198*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1199*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToPrecision(2300010, 5, &builder));
1200*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e6", builder.Finalize());
1201*a6021da3SAndroid Build Coastguard Worker 
1202*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1203*a6021da3SAndroid Build Coastguard Worker   CHECK(dc10.ToPrecision(2300010, 5, &builder));
1204*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e6", builder.Finalize());
1205*a6021da3SAndroid Build Coastguard Worker 
1206*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1207*a6021da3SAndroid Build Coastguard Worker   CHECK(dc11.ToPrecision(2300010, 5, &builder));
1208*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3e6", builder.Finalize());
1209*a6021da3SAndroid Build Coastguard Worker 
1210*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1211*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(2300010, 5, &builder));
1212*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.3000e6", builder.Finalize());
1213*a6021da3SAndroid Build Coastguard Worker 
1214*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1215*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToPrecision(0.02300010, 5, &builder));
1216*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.023", builder.Finalize());
1217*a6021da3SAndroid Build Coastguard Worker 
1218*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1219*a6021da3SAndroid Build Coastguard Worker   CHECK(dc10.ToPrecision(0.02300010, 5, &builder));
1220*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.023", builder.Finalize());
1221*a6021da3SAndroid Build Coastguard Worker 
1222*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1223*a6021da3SAndroid Build Coastguard Worker   CHECK(dc11.ToPrecision(0.02300010, 5, &builder));
1224*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.023", builder.Finalize());
1225*a6021da3SAndroid Build Coastguard Worker 
1226*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1227*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(0.02300010, 5, &builder));
1228*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.023000", builder.Finalize());
1229*a6021da3SAndroid Build Coastguard Worker 
1230*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1231*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToPrecision(2000010, 5, &builder));
1232*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2e6", builder.Finalize());
1233*a6021da3SAndroid Build Coastguard Worker 
1234*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1235*a6021da3SAndroid Build Coastguard Worker   CHECK(dc10.ToPrecision(2000010, 5, &builder));
1236*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2e6", builder.Finalize());
1237*a6021da3SAndroid Build Coastguard Worker 
1238*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1239*a6021da3SAndroid Build Coastguard Worker   CHECK(dc11.ToPrecision(2000010, 5, &builder));
1240*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2e6", builder.Finalize());
1241*a6021da3SAndroid Build Coastguard Worker 
1242*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1243*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(2000010, 5, &builder));
1244*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.0000e6", builder.Finalize());
1245*a6021da3SAndroid Build Coastguard Worker 
1246*a6021da3SAndroid Build Coastguard Worker   // Test that rounding up still works with NO_TRAILING_ZERO
1247*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1248*a6021da3SAndroid Build Coastguard Worker   CHECK(dc9.ToPrecision(2000080, 5, &builder));
1249*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.0001e6", builder.Finalize());
1250*a6021da3SAndroid Build Coastguard Worker 
1251*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1252*a6021da3SAndroid Build Coastguard Worker   CHECK(dc10.ToPrecision(2000080, 5, &builder));
1253*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.0001e6", builder.Finalize());
1254*a6021da3SAndroid Build Coastguard Worker 
1255*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1256*a6021da3SAndroid Build Coastguard Worker   CHECK(dc11.ToPrecision(2000080, 5, &builder));
1257*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.0001e6", builder.Finalize());
1258*a6021da3SAndroid Build Coastguard Worker 
1259*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1260*a6021da3SAndroid Build Coastguard Worker   CHECK(dc5.ToPrecision(2000080, 5, &builder));
1261*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("2.0001e6", builder.Finalize());
1262*a6021da3SAndroid Build Coastguard Worker }
1263*a6021da3SAndroid Build Coastguard Worker 
1264*a6021da3SAndroid Build Coastguard Worker 
TEST(DoubleToStringJavaScript)1265*a6021da3SAndroid Build Coastguard Worker TEST(DoubleToStringJavaScript) {
1266*a6021da3SAndroid Build Coastguard Worker   const int kBufferSize = 128;
1267*a6021da3SAndroid Build Coastguard Worker   char buffer[kBufferSize];
1268*a6021da3SAndroid Build Coastguard Worker   StringBuilder builder(buffer, kBufferSize);
1269*a6021da3SAndroid Build Coastguard Worker   const DoubleToStringConverter& dc =
1270*a6021da3SAndroid Build Coastguard Worker       DoubleToStringConverter::EcmaScriptConverter();
1271*a6021da3SAndroid Build Coastguard Worker 
1272*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1273*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(Double::NaN(), &builder));
1274*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1275*a6021da3SAndroid Build Coastguard Worker 
1276*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1277*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(Double::Infinity(), &builder));
1278*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
1279*a6021da3SAndroid Build Coastguard Worker 
1280*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1281*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-Double::Infinity(), &builder));
1282*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
1283*a6021da3SAndroid Build Coastguard Worker 
1284*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1285*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.0, &builder));
1286*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
1287*a6021da3SAndroid Build Coastguard Worker 
1288*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1289*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(9.0, &builder));
1290*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("9", builder.Finalize());
1291*a6021da3SAndroid Build Coastguard Worker 
1292*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1293*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(90.0, &builder));
1294*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("90", builder.Finalize());
1295*a6021da3SAndroid Build Coastguard Worker 
1296*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1297*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(90.12, &builder));
1298*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("90.12", builder.Finalize());
1299*a6021da3SAndroid Build Coastguard Worker 
1300*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1301*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.1, &builder));
1302*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.1", builder.Finalize());
1303*a6021da3SAndroid Build Coastguard Worker 
1304*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1305*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.01, &builder));
1306*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.01", builder.Finalize());
1307*a6021da3SAndroid Build Coastguard Worker 
1308*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1309*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.0123, &builder));
1310*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0123", builder.Finalize());
1311*a6021da3SAndroid Build Coastguard Worker 
1312*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1313*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(111111111111111111111.0, &builder));
1314*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("111111111111111110000", builder.Finalize());
1315*a6021da3SAndroid Build Coastguard Worker 
1316*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1317*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(100000000000000000000.0, &builder));
1318*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("100000000000000000000", builder.Finalize());
1319*a6021da3SAndroid Build Coastguard Worker 
1320*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1321*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(1111111111111111111111.0, &builder));
1322*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111111111e+21", builder.Finalize());
1323*a6021da3SAndroid Build Coastguard Worker 
1324*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1325*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(11111111111111111111111.0, &builder));
1326*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1111111111111111e+22", builder.Finalize());
1327*a6021da3SAndroid Build Coastguard Worker 
1328*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1329*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.00001, &builder));
1330*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00001", builder.Finalize());
1331*a6021da3SAndroid Build Coastguard Worker 
1332*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1333*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.000001, &builder));
1334*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.000001", builder.Finalize());
1335*a6021da3SAndroid Build Coastguard Worker 
1336*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1337*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.0000001, &builder));
1338*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-7", builder.Finalize());
1339*a6021da3SAndroid Build Coastguard Worker 
1340*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1341*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.00000012, &builder));
1342*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e-7", builder.Finalize());
1343*a6021da3SAndroid Build Coastguard Worker 
1344*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1345*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.000000123, &builder));
1346*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.23e-7", builder.Finalize());
1347*a6021da3SAndroid Build Coastguard Worker 
1348*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1349*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.00000001, &builder));
1350*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-8", builder.Finalize());
1351*a6021da3SAndroid Build Coastguard Worker 
1352*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1353*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.000000012, &builder));
1354*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e-8", builder.Finalize());
1355*a6021da3SAndroid Build Coastguard Worker 
1356*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1357*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.000000012, &builder));
1358*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2e-8", builder.Finalize());
1359*a6021da3SAndroid Build Coastguard Worker 
1360*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1361*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(0.0000000123, &builder));
1362*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.23e-8", builder.Finalize());
1363*a6021da3SAndroid Build Coastguard Worker 
1364*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1365*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0, &builder));
1366*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
1367*a6021da3SAndroid Build Coastguard Worker 
1368*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1369*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-9.0, &builder));
1370*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-9", builder.Finalize());
1371*a6021da3SAndroid Build Coastguard Worker 
1372*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1373*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-90.0, &builder));
1374*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-90", builder.Finalize());
1375*a6021da3SAndroid Build Coastguard Worker 
1376*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1377*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-90.12, &builder));
1378*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-90.12", builder.Finalize());
1379*a6021da3SAndroid Build Coastguard Worker 
1380*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1381*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.1, &builder));
1382*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.1", builder.Finalize());
1383*a6021da3SAndroid Build Coastguard Worker 
1384*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1385*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.01, &builder));
1386*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.01", builder.Finalize());
1387*a6021da3SAndroid Build Coastguard Worker 
1388*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1389*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0123, &builder));
1390*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0123", builder.Finalize());
1391*a6021da3SAndroid Build Coastguard Worker 
1392*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1393*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-111111111111111111111.0, &builder));
1394*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-111111111111111110000", builder.Finalize());
1395*a6021da3SAndroid Build Coastguard Worker 
1396*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1397*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-1111111111111111111111.0, &builder));
1398*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1111111111111111e+21", builder.Finalize());
1399*a6021da3SAndroid Build Coastguard Worker 
1400*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1401*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-11111111111111111111111.0, &builder));
1402*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1111111111111111e+22", builder.Finalize());
1403*a6021da3SAndroid Build Coastguard Worker 
1404*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1405*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.00001, &builder));
1406*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00001", builder.Finalize());
1407*a6021da3SAndroid Build Coastguard Worker 
1408*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1409*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.000001, &builder));
1410*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.000001", builder.Finalize());
1411*a6021da3SAndroid Build Coastguard Worker 
1412*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1413*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0000001, &builder));
1414*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-7", builder.Finalize());
1415*a6021da3SAndroid Build Coastguard Worker 
1416*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1417*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.00000012, &builder));
1418*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-7", builder.Finalize());
1419*a6021da3SAndroid Build Coastguard Worker 
1420*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1421*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.000000123, &builder));
1422*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.23e-7", builder.Finalize());
1423*a6021da3SAndroid Build Coastguard Worker 
1424*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1425*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.00000001, &builder));
1426*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-8", builder.Finalize());
1427*a6021da3SAndroid Build Coastguard Worker 
1428*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1429*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.000000012, &builder));
1430*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-8", builder.Finalize());
1431*a6021da3SAndroid Build Coastguard Worker 
1432*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1433*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.000000012, &builder));
1434*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-8", builder.Finalize());
1435*a6021da3SAndroid Build Coastguard Worker 
1436*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1437*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToShortest(-0.0000000123, &builder));
1438*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.23e-8", builder.Finalize());
1439*a6021da3SAndroid Build Coastguard Worker 
1440*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1441*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(Double::NaN(), 2, &builder));
1442*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1443*a6021da3SAndroid Build Coastguard Worker 
1444*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1445*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(Double::Infinity(), 2, &builder));
1446*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
1447*a6021da3SAndroid Build Coastguard Worker 
1448*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1449*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-Double::Infinity(), 2, &builder));
1450*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
1451*a6021da3SAndroid Build Coastguard Worker 
1452*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1453*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.1, 1, &builder));
1454*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.1", builder.Finalize());
1455*a6021da3SAndroid Build Coastguard Worker 
1456*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1457*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.1, 2, &builder));
1458*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.10", builder.Finalize());
1459*a6021da3SAndroid Build Coastguard Worker 
1460*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1461*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.1, 3, &builder));
1462*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.100", builder.Finalize());
1463*a6021da3SAndroid Build Coastguard Worker 
1464*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1465*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.01, 2, &builder));
1466*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.01", builder.Finalize());
1467*a6021da3SAndroid Build Coastguard Worker 
1468*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1469*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.01, 3, &builder));
1470*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.010", builder.Finalize());
1471*a6021da3SAndroid Build Coastguard Worker 
1472*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1473*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.01, 4, &builder));
1474*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0100", builder.Finalize());
1475*a6021da3SAndroid Build Coastguard Worker 
1476*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1477*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.001, 2, &builder));
1478*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00", builder.Finalize());
1479*a6021da3SAndroid Build Coastguard Worker 
1480*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1481*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.001, 3, &builder));
1482*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.001", builder.Finalize());
1483*a6021da3SAndroid Build Coastguard Worker 
1484*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1485*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.001, 4, &builder));
1486*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0010", builder.Finalize());
1487*a6021da3SAndroid Build Coastguard Worker 
1488*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1489*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1.0, 4, &builder));
1490*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.0000", builder.Finalize());
1491*a6021da3SAndroid Build Coastguard Worker 
1492*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1493*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1.0, 1, &builder));
1494*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.0", builder.Finalize());
1495*a6021da3SAndroid Build Coastguard Worker 
1496*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1497*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1.0, 0, &builder));
1498*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1", builder.Finalize());
1499*a6021da3SAndroid Build Coastguard Worker 
1500*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1501*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-12.0, 0, &builder));
1502*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-12", builder.Finalize());
1503*a6021da3SAndroid Build Coastguard Worker 
1504*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1505*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1.1, 0, &builder));
1506*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1", builder.Finalize());
1507*a6021da3SAndroid Build Coastguard Worker 
1508*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1509*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-12.1, 0, &builder));
1510*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-12", builder.Finalize());
1511*a6021da3SAndroid Build Coastguard Worker 
1512*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1513*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1.12, 0, &builder));
1514*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1", builder.Finalize());
1515*a6021da3SAndroid Build Coastguard Worker 
1516*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1517*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-12.12, 0, &builder));
1518*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-12", builder.Finalize());
1519*a6021da3SAndroid Build Coastguard Worker 
1520*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1521*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.0000006, 7, &builder));
1522*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0000006", builder.Finalize());
1523*a6021da3SAndroid Build Coastguard Worker 
1524*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1525*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.00000006, 8, &builder));
1526*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00000006", builder.Finalize());
1527*a6021da3SAndroid Build Coastguard Worker 
1528*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1529*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.00000006, 9, &builder));
1530*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.000000060", builder.Finalize());
1531*a6021da3SAndroid Build Coastguard Worker 
1532*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1533*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.00000006, 10, &builder));
1534*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0000000600", builder.Finalize());
1535*a6021da3SAndroid Build Coastguard Worker 
1536*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1537*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0, 0, &builder));
1538*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
1539*a6021da3SAndroid Build Coastguard Worker 
1540*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1541*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0, 1, &builder));
1542*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.0", builder.Finalize());
1543*a6021da3SAndroid Build Coastguard Worker 
1544*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1545*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0, 2, &builder));
1546*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00", builder.Finalize());
1547*a6021da3SAndroid Build Coastguard Worker 
1548*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1549*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1000, 0, &builder));
1550*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000", builder.Finalize());
1551*a6021da3SAndroid Build Coastguard Worker 
1552*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1553*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.00001, 0, &builder));
1554*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
1555*a6021da3SAndroid Build Coastguard Worker 
1556*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1557*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.00001, 5, &builder));
1558*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00001", builder.Finalize());
1559*a6021da3SAndroid Build Coastguard Worker 
1560*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1561*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0000000000000000001, 20, &builder));
1562*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00000000000000000010", builder.Finalize());
1563*a6021da3SAndroid Build Coastguard Worker 
1564*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1565*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.00001, 17, &builder));
1566*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00001000000000000", builder.Finalize());
1567*a6021da3SAndroid Build Coastguard Worker 
1568*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1569*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1000000000000000128.0, 0, &builder));
1570*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000000000000000128", builder.Finalize());
1571*a6021da3SAndroid Build Coastguard Worker 
1572*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1573*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1000000000000000128.0, 1, &builder));
1574*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000000000000000128.0", builder.Finalize());
1575*a6021da3SAndroid Build Coastguard Worker 
1576*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1577*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1000000000000000128.0, 2, &builder));
1578*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000000000000000128.00", builder.Finalize());
1579*a6021da3SAndroid Build Coastguard Worker 
1580*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1581*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1000000000000000128.0, 20, &builder));
1582*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1000000000000000128.00000000000000000000", builder.Finalize());
1583*a6021da3SAndroid Build Coastguard Worker 
1584*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1585*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.0, 0, &builder));
1586*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0", builder.Finalize());
1587*a6021da3SAndroid Build Coastguard Worker 
1588*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1589*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-42.0, 3, &builder));
1590*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-42.000", builder.Finalize());
1591*a6021da3SAndroid Build Coastguard Worker 
1592*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1593*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-1000000000000000128.0, 0, &builder));
1594*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1000000000000000128", builder.Finalize());
1595*a6021da3SAndroid Build Coastguard Worker 
1596*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1597*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.0000000000000000001, 20, &builder));
1598*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00000000000000000010", builder.Finalize());
1599*a6021da3SAndroid Build Coastguard Worker 
1600*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1601*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.123123123123123, 20, &builder));
1602*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.12312312312312299889", builder.Finalize());
1603*a6021da3SAndroid Build Coastguard Worker 
1604*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1605*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(0.5, 0, &builder));
1606*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1", builder.Finalize());
1607*a6021da3SAndroid Build Coastguard Worker 
1608*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1609*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(-0.5, 0, &builder));
1610*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1", builder.Finalize());
1611*a6021da3SAndroid Build Coastguard Worker 
1612*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1613*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(1.25, 1, &builder));
1614*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.3", builder.Finalize());
1615*a6021da3SAndroid Build Coastguard Worker 
1616*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1617*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(234.20405, 4, &builder));
1618*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("234.2040", builder.Finalize());
1619*a6021da3SAndroid Build Coastguard Worker 
1620*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1621*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToFixed(234.2040506, 4, &builder));
1622*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("234.2041", builder.Finalize());
1623*a6021da3SAndroid Build Coastguard Worker 
1624*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1625*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, -1, &builder));
1626*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+0", builder.Finalize());
1627*a6021da3SAndroid Build Coastguard Worker 
1628*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1629*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.0, -1, &builder));
1630*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e+1", builder.Finalize());
1631*a6021da3SAndroid Build Coastguard Worker 
1632*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1633*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(112.0, -1, &builder));
1634*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.12e+2", builder.Finalize());
1635*a6021da3SAndroid Build Coastguard Worker 
1636*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1637*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, 0, &builder));
1638*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+0", builder.Finalize());
1639*a6021da3SAndroid Build Coastguard Worker 
1640*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1641*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.0, 0, &builder));
1642*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+1", builder.Finalize());
1643*a6021da3SAndroid Build Coastguard Worker 
1644*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1645*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(112.0, 0, &builder));
1646*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+2", builder.Finalize());
1647*a6021da3SAndroid Build Coastguard Worker 
1648*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1649*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, 1, &builder));
1650*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0e+0", builder.Finalize());
1651*a6021da3SAndroid Build Coastguard Worker 
1652*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1653*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.0, 1, &builder));
1654*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e+1", builder.Finalize());
1655*a6021da3SAndroid Build Coastguard Worker 
1656*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1657*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(112.0, 1, &builder));
1658*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e+2", builder.Finalize());
1659*a6021da3SAndroid Build Coastguard Worker 
1660*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1661*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, 2, &builder));
1662*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00e+0", builder.Finalize());
1663*a6021da3SAndroid Build Coastguard Worker 
1664*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1665*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.0, 2, &builder));
1666*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.10e+1", builder.Finalize());
1667*a6021da3SAndroid Build Coastguard Worker 
1668*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1669*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(112.0, 2, &builder));
1670*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.12e+2", builder.Finalize());
1671*a6021da3SAndroid Build Coastguard Worker 
1672*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1673*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, 3, &builder));
1674*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.000e+0", builder.Finalize());
1675*a6021da3SAndroid Build Coastguard Worker 
1676*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1677*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.0, 3, &builder));
1678*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.100e+1", builder.Finalize());
1679*a6021da3SAndroid Build Coastguard Worker 
1680*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1681*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(112.0, 3, &builder));
1682*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.120e+2", builder.Finalize());
1683*a6021da3SAndroid Build Coastguard Worker 
1684*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1685*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.1, -1, &builder));
1686*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-1", builder.Finalize());
1687*a6021da3SAndroid Build Coastguard Worker 
1688*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1689*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.11, -1, &builder));
1690*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e-1", builder.Finalize());
1691*a6021da3SAndroid Build Coastguard Worker 
1692*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1693*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.112, -1, &builder));
1694*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.12e-1", builder.Finalize());
1695*a6021da3SAndroid Build Coastguard Worker 
1696*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1697*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.1, 0, &builder));
1698*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-1", builder.Finalize());
1699*a6021da3SAndroid Build Coastguard Worker 
1700*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1701*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.11, 0, &builder));
1702*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-1", builder.Finalize());
1703*a6021da3SAndroid Build Coastguard Worker 
1704*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1705*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.112, 0, &builder));
1706*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e-1", builder.Finalize());
1707*a6021da3SAndroid Build Coastguard Worker 
1708*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1709*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.1, 1, &builder));
1710*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.0e-1", builder.Finalize());
1711*a6021da3SAndroid Build Coastguard Worker 
1712*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1713*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.11, 1, &builder));
1714*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e-1", builder.Finalize());
1715*a6021da3SAndroid Build Coastguard Worker 
1716*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1717*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.112, 1, &builder));
1718*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1e-1", builder.Finalize());
1719*a6021da3SAndroid Build Coastguard Worker 
1720*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1721*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.1, 2, &builder));
1722*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.00e-1", builder.Finalize());
1723*a6021da3SAndroid Build Coastguard Worker 
1724*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1725*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.11, 2, &builder));
1726*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.10e-1", builder.Finalize());
1727*a6021da3SAndroid Build Coastguard Worker 
1728*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1729*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.112, 2, &builder));
1730*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.12e-1", builder.Finalize());
1731*a6021da3SAndroid Build Coastguard Worker 
1732*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1733*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.1, 3, &builder));
1734*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.000e-1", builder.Finalize());
1735*a6021da3SAndroid Build Coastguard Worker 
1736*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1737*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.11, 3, &builder));
1738*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.100e-1", builder.Finalize());
1739*a6021da3SAndroid Build Coastguard Worker 
1740*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1741*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.112, 3, &builder));
1742*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.120e-1", builder.Finalize());
1743*a6021da3SAndroid Build Coastguard Worker 
1744*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1745*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-1.0, -1, &builder));
1746*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e+0", builder.Finalize());
1747*a6021da3SAndroid Build Coastguard Worker 
1748*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1749*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-11.0, -1, &builder));
1750*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e+1", builder.Finalize());
1751*a6021da3SAndroid Build Coastguard Worker 
1752*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1753*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-112.0, -1, &builder));
1754*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.12e+2", builder.Finalize());
1755*a6021da3SAndroid Build Coastguard Worker 
1756*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1757*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-1.0, 0, &builder));
1758*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e+0", builder.Finalize());
1759*a6021da3SAndroid Build Coastguard Worker 
1760*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1761*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-11.0, 0, &builder));
1762*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e+1", builder.Finalize());
1763*a6021da3SAndroid Build Coastguard Worker 
1764*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1765*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-112.0, 0, &builder));
1766*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e+2", builder.Finalize());
1767*a6021da3SAndroid Build Coastguard Worker 
1768*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1769*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-1.0, 1, &builder));
1770*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.0e+0", builder.Finalize());
1771*a6021da3SAndroid Build Coastguard Worker 
1772*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1773*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-11.0, 1, &builder));
1774*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e+1", builder.Finalize());
1775*a6021da3SAndroid Build Coastguard Worker 
1776*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1777*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-112.0, 1, &builder));
1778*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e+2", builder.Finalize());
1779*a6021da3SAndroid Build Coastguard Worker 
1780*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1781*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-1.0, 2, &builder));
1782*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.00e+0", builder.Finalize());
1783*a6021da3SAndroid Build Coastguard Worker 
1784*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1785*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-11.0, 2, &builder));
1786*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.10e+1", builder.Finalize());
1787*a6021da3SAndroid Build Coastguard Worker 
1788*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1789*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-112.0, 2, &builder));
1790*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.12e+2", builder.Finalize());
1791*a6021da3SAndroid Build Coastguard Worker 
1792*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1793*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-1.0, 3, &builder));
1794*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.000e+0", builder.Finalize());
1795*a6021da3SAndroid Build Coastguard Worker 
1796*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1797*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-11.0, 3, &builder));
1798*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.100e+1", builder.Finalize());
1799*a6021da3SAndroid Build Coastguard Worker 
1800*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1801*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-112.0, 3, &builder));
1802*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.120e+2", builder.Finalize());
1803*a6021da3SAndroid Build Coastguard Worker 
1804*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1805*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.1, -1, &builder));
1806*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-1", builder.Finalize());
1807*a6021da3SAndroid Build Coastguard Worker 
1808*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1809*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.11, -1, &builder));
1810*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e-1", builder.Finalize());
1811*a6021da3SAndroid Build Coastguard Worker 
1812*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1813*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.112, -1, &builder));
1814*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.12e-1", builder.Finalize());
1815*a6021da3SAndroid Build Coastguard Worker 
1816*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1817*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.1, 0, &builder));
1818*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-1", builder.Finalize());
1819*a6021da3SAndroid Build Coastguard Worker 
1820*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1821*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.11, 0, &builder));
1822*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-1", builder.Finalize());
1823*a6021da3SAndroid Build Coastguard Worker 
1824*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1825*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.112, 0, &builder));
1826*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1e-1", builder.Finalize());
1827*a6021da3SAndroid Build Coastguard Worker 
1828*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1829*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.1, 1, &builder));
1830*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.0e-1", builder.Finalize());
1831*a6021da3SAndroid Build Coastguard Worker 
1832*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1833*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.11, 1, &builder));
1834*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e-1", builder.Finalize());
1835*a6021da3SAndroid Build Coastguard Worker 
1836*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1837*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.112, 1, &builder));
1838*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1e-1", builder.Finalize());
1839*a6021da3SAndroid Build Coastguard Worker 
1840*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1841*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.1, 2, &builder));
1842*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.00e-1", builder.Finalize());
1843*a6021da3SAndroid Build Coastguard Worker 
1844*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1845*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.11, 2, &builder));
1846*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.10e-1", builder.Finalize());
1847*a6021da3SAndroid Build Coastguard Worker 
1848*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1849*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.112, 2, &builder));
1850*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.12e-1", builder.Finalize());
1851*a6021da3SAndroid Build Coastguard Worker 
1852*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1853*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.1, 3, &builder));
1854*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.000e-1", builder.Finalize());
1855*a6021da3SAndroid Build Coastguard Worker 
1856*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1857*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.11, 3, &builder));
1858*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.100e-1", builder.Finalize());
1859*a6021da3SAndroid Build Coastguard Worker 
1860*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1861*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.112, 3, &builder));
1862*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.120e-1", builder.Finalize());
1863*a6021da3SAndroid Build Coastguard Worker 
1864*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1865*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(Double::NaN(), 2, &builder));
1866*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1867*a6021da3SAndroid Build Coastguard Worker 
1868*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1869*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(Double::Infinity(), 2, &builder));
1870*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
1871*a6021da3SAndroid Build Coastguard Worker 
1872*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1873*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-Double::Infinity(), 2, &builder));
1874*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
1875*a6021da3SAndroid Build Coastguard Worker 
1876*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1877*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(1.0, 0, &builder));
1878*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+0", builder.Finalize());
1879*a6021da3SAndroid Build Coastguard Worker 
1880*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1881*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, -1, &builder));
1882*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0e+0", builder.Finalize());
1883*a6021da3SAndroid Build Coastguard Worker 
1884*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1885*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.0, 2, &builder));
1886*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.00e+0", builder.Finalize());
1887*a6021da3SAndroid Build Coastguard Worker 
1888*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1889*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.2356, 0, &builder));
1890*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+1", builder.Finalize());
1891*a6021da3SAndroid Build Coastguard Worker 
1892*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1893*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(11.2356, 4, &builder));
1894*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1236e+1", builder.Finalize());
1895*a6021da3SAndroid Build Coastguard Worker 
1896*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1897*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.000112356, 4, &builder));
1898*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.1236e-4", builder.Finalize());
1899*a6021da3SAndroid Build Coastguard Worker 
1900*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1901*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.000112356, 4, &builder));
1902*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.1236e-4", builder.Finalize());
1903*a6021da3SAndroid Build Coastguard Worker 
1904*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1905*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(0.000112356, -1, &builder));
1906*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.12356e-4", builder.Finalize());
1907*a6021da3SAndroid Build Coastguard Worker 
1908*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1909*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToExponential(-0.000112356, -1, &builder));
1910*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.12356e-4", builder.Finalize());
1911*a6021da3SAndroid Build Coastguard Worker 
1912*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1913*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(Double::NaN(), 1, &builder));
1914*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("NaN", builder.Finalize());
1915*a6021da3SAndroid Build Coastguard Worker 
1916*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1917*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(Double::Infinity(), 2, &builder));
1918*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("Infinity", builder.Finalize());
1919*a6021da3SAndroid Build Coastguard Worker 
1920*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1921*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-Double::Infinity(), 2, &builder));
1922*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-Infinity", builder.Finalize());
1923*a6021da3SAndroid Build Coastguard Worker 
1924*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1925*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.000555, 15, &builder));
1926*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("0.000555000000000000", builder.Finalize());
1927*a6021da3SAndroid Build Coastguard Worker 
1928*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1929*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(0.000000555, 15, &builder));
1930*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("5.55000000000000e-7", builder.Finalize());
1931*a6021da3SAndroid Build Coastguard Worker 
1932*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1933*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-0.000000555, 15, &builder));
1934*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-5.55000000000000e-7", builder.Finalize());
1935*a6021da3SAndroid Build Coastguard Worker 
1936*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1937*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(123456789.0, 1, &builder));
1938*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1e+8", builder.Finalize());
1939*a6021da3SAndroid Build Coastguard Worker 
1940*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1941*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(123456789.0, 9, &builder));
1942*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("123456789", builder.Finalize());
1943*a6021da3SAndroid Build Coastguard Worker 
1944*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1945*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(123456789.0, 8, &builder));
1946*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.2345679e+8", builder.Finalize());
1947*a6021da3SAndroid Build Coastguard Worker 
1948*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1949*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(123456789.0, 7, &builder));
1950*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.234568e+8", builder.Finalize());
1951*a6021da3SAndroid Build Coastguard Worker 
1952*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1953*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-123456789.0, 7, &builder));
1954*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.234568e+8", builder.Finalize());
1955*a6021da3SAndroid Build Coastguard Worker 
1956*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1957*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.0000000012345, 2, &builder));
1958*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-9", builder.Finalize());
1959*a6021da3SAndroid Build Coastguard Worker 
1960*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1961*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.000000012345, 2, &builder));
1962*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-8", builder.Finalize());
1963*a6021da3SAndroid Build Coastguard Worker 
1964*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1965*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.00000012345, 2, &builder));
1966*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e-7", builder.Finalize());
1967*a6021da3SAndroid Build Coastguard Worker 
1968*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1969*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.0000012345, 2, &builder));
1970*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0000012", builder.Finalize());
1971*a6021da3SAndroid Build Coastguard Worker 
1972*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1973*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.000012345, 2, &builder));
1974*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.000012", builder.Finalize());
1975*a6021da3SAndroid Build Coastguard Worker 
1976*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1977*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.00012345, 2, &builder));
1978*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.00012", builder.Finalize());
1979*a6021da3SAndroid Build Coastguard Worker 
1980*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1981*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.0012345, 2, &builder));
1982*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.0012", builder.Finalize());
1983*a6021da3SAndroid Build Coastguard Worker 
1984*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1985*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.012345, 2, &builder));
1986*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.012", builder.Finalize());
1987*a6021da3SAndroid Build Coastguard Worker 
1988*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1989*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-.12345, 2, &builder));
1990*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-0.12", builder.Finalize());
1991*a6021da3SAndroid Build Coastguard Worker 
1992*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1993*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-1.2345, 2, &builder));
1994*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2", builder.Finalize());
1995*a6021da3SAndroid Build Coastguard Worker 
1996*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
1997*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-12.345, 2, &builder));
1998*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-12", builder.Finalize());
1999*a6021da3SAndroid Build Coastguard Worker 
2000*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2001*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-123.45, 2, &builder));
2002*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e+2", builder.Finalize());
2003*a6021da3SAndroid Build Coastguard Worker 
2004*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2005*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-1234.5, 2, &builder));
2006*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e+3", builder.Finalize());
2007*a6021da3SAndroid Build Coastguard Worker 
2008*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2009*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-12345.0, 2, &builder));
2010*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.2e+4", builder.Finalize());
2011*a6021da3SAndroid Build Coastguard Worker 
2012*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2013*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-12345.67, 4, &builder));
2014*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.235e+4", builder.Finalize());
2015*a6021da3SAndroid Build Coastguard Worker 
2016*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2017*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(-12344.67, 4, &builder));
2018*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("-1.234e+4", builder.Finalize());
2019*a6021da3SAndroid Build Coastguard Worker 
2020*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2021*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(1.25, 2, &builder));
2022*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.3", builder.Finalize());
2023*a6021da3SAndroid Build Coastguard Worker 
2024*a6021da3SAndroid Build Coastguard Worker   builder.Reset();
2025*a6021da3SAndroid Build Coastguard Worker   CHECK(dc.ToPrecision(1.35, 2, &builder));
2026*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ("1.4", builder.Finalize());
2027*a6021da3SAndroid Build Coastguard Worker }
2028*a6021da3SAndroid Build Coastguard Worker 
2029*a6021da3SAndroid Build Coastguard Worker 
StrToD16(const uc16 * str16,int length,int flags,double empty_string_value,int * processed_characters_count,bool * processed_all,uc16 separator=StringToDoubleConverter::kNoSeparator)2030*a6021da3SAndroid Build Coastguard Worker static double StrToD16(const uc16* str16, int length, int flags,
2031*a6021da3SAndroid Build Coastguard Worker                        double empty_string_value,
2032*a6021da3SAndroid Build Coastguard Worker                        int* processed_characters_count, bool* processed_all,
2033*a6021da3SAndroid Build Coastguard Worker                        uc16 separator = StringToDoubleConverter::kNoSeparator) {
2034*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, empty_string_value, Double::NaN(),
2035*a6021da3SAndroid Build Coastguard Worker                                     NULL, NULL, separator);
2036*a6021da3SAndroid Build Coastguard Worker   double result =
2037*a6021da3SAndroid Build Coastguard Worker       converter.StringToDouble(str16, length, processed_characters_count);
2038*a6021da3SAndroid Build Coastguard Worker   *processed_all = (length == *processed_characters_count);
2039*a6021da3SAndroid Build Coastguard Worker   return result;
2040*a6021da3SAndroid Build Coastguard Worker }
2041*a6021da3SAndroid Build Coastguard Worker 
2042*a6021da3SAndroid Build Coastguard Worker 
StrToD16(const char * str,int flags,double empty_string_value,int * processed_characters_count,bool * processed_all,char char_separator,uc16 separator)2043*a6021da3SAndroid Build Coastguard Worker static double StrToD16(const char* str, int flags,
2044*a6021da3SAndroid Build Coastguard Worker                        double empty_string_value,
2045*a6021da3SAndroid Build Coastguard Worker                        int* processed_characters_count, bool* processed_all,
2046*a6021da3SAndroid Build Coastguard Worker                        char char_separator, uc16 separator) {
2047*a6021da3SAndroid Build Coastguard Worker   uc16 str16[256];
2048*a6021da3SAndroid Build Coastguard Worker   int length = -1;
2049*a6021da3SAndroid Build Coastguard Worker   for (int i = 0;; i++) {
2050*a6021da3SAndroid Build Coastguard Worker     if (str[i] == char_separator) {
2051*a6021da3SAndroid Build Coastguard Worker             str16[i] = separator;
2052*a6021da3SAndroid Build Coastguard Worker     } else {
2053*a6021da3SAndroid Build Coastguard Worker             str16[i] = str[i];
2054*a6021da3SAndroid Build Coastguard Worker     }
2055*a6021da3SAndroid Build Coastguard Worker     if (str[i] == '\0') {
2056*a6021da3SAndroid Build Coastguard Worker       length = i;
2057*a6021da3SAndroid Build Coastguard Worker       break;
2058*a6021da3SAndroid Build Coastguard Worker     }
2059*a6021da3SAndroid Build Coastguard Worker   }
2060*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(length < 256);
2061*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, empty_string_value, Double::NaN(),
2062*a6021da3SAndroid Build Coastguard Worker                                     NULL, NULL, separator);
2063*a6021da3SAndroid Build Coastguard Worker   double result =
2064*a6021da3SAndroid Build Coastguard Worker       converter.StringToDouble(str16, length, processed_characters_count);
2065*a6021da3SAndroid Build Coastguard Worker   *processed_all = (length == *processed_characters_count);
2066*a6021da3SAndroid Build Coastguard Worker   return result;
2067*a6021da3SAndroid Build Coastguard Worker }
2068*a6021da3SAndroid Build Coastguard Worker 
2069*a6021da3SAndroid Build Coastguard Worker 
StrToD(const char * str,int flags,double empty_string_value,int * processed_characters_count,bool * processed_all,uc16 separator=StringToDoubleConverter::kNoSeparator)2070*a6021da3SAndroid Build Coastguard Worker static double StrToD(const char* str, int flags, double empty_string_value,
2071*a6021da3SAndroid Build Coastguard Worker                      int* processed_characters_count, bool* processed_all,
2072*a6021da3SAndroid Build Coastguard Worker                      uc16 separator = StringToDoubleConverter::kNoSeparator) {
2073*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, empty_string_value, Double::NaN(),
2074*a6021da3SAndroid Build Coastguard Worker                                     NULL, NULL, separator);
2075*a6021da3SAndroid Build Coastguard Worker   int len = static_cast<int>(strlen(str));
2076*a6021da3SAndroid Build Coastguard Worker   double result = converter.StringToDouble(str, len,
2077*a6021da3SAndroid Build Coastguard Worker                                            processed_characters_count);
2078*a6021da3SAndroid Build Coastguard Worker   *processed_all =
2079*a6021da3SAndroid Build Coastguard Worker       ((strlen(str) == static_cast<unsigned>(*processed_characters_count)));
2080*a6021da3SAndroid Build Coastguard Worker 
2081*a6021da3SAndroid Build Coastguard Worker   uc16 buffer16[256];
2082*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(strlen(str) < DOUBLE_CONVERSION_ARRAY_SIZE(buffer16));
2083*a6021da3SAndroid Build Coastguard Worker   for (int i = 0; i < len; i++) {
2084*a6021da3SAndroid Build Coastguard Worker     buffer16[i] = str[i];
2085*a6021da3SAndroid Build Coastguard Worker   }
2086*a6021da3SAndroid Build Coastguard Worker   int processed_characters_count16;
2087*a6021da3SAndroid Build Coastguard Worker   bool processed_all16;
2088*a6021da3SAndroid Build Coastguard Worker   double result16 = StrToD16(buffer16, len, flags, empty_string_value,
2089*a6021da3SAndroid Build Coastguard Worker                              &processed_characters_count16, &processed_all16,
2090*a6021da3SAndroid Build Coastguard Worker                              separator);
2091*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(result, result16);
2092*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(*processed_characters_count, processed_characters_count16);
2093*a6021da3SAndroid Build Coastguard Worker   return result;
2094*a6021da3SAndroid Build Coastguard Worker }
2095*a6021da3SAndroid Build Coastguard Worker 
2096*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleVarious)2097*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleVarious) {
2098*a6021da3SAndroid Build Coastguard Worker   int flags;
2099*a6021da3SAndroid Build Coastguard Worker   int processed;
2100*a6021da3SAndroid Build Coastguard Worker   bool all_used;
2101*a6021da3SAndroid Build Coastguard Worker 
2102*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
2103*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
2104*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES;
2105*a6021da3SAndroid Build Coastguard Worker 
2106*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2107*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2108*a6021da3SAndroid Build Coastguard Worker 
2109*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2110*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2111*a6021da3SAndroid Build Coastguard Worker 
2112*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("  ", flags, 0.0, &processed, &all_used));
2113*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2114*a6021da3SAndroid Build Coastguard Worker 
2115*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("  ", flags, 1.0, &processed, &all_used));
2116*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2117*a6021da3SAndroid Build Coastguard Worker 
2118*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42", flags, 0.0, &processed, &all_used));
2119*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2120*a6021da3SAndroid Build Coastguard Worker 
2121*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" + 42 ", flags, 0.0, &processed, &all_used));
2122*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2123*a6021da3SAndroid Build Coastguard Worker 
2124*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" - 42 ", flags, 0.0, &processed, &all_used));
2125*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2126*a6021da3SAndroid Build Coastguard Worker 
2127*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x", flags, 1.0, &processed, &all_used));
2128*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2129*a6021da3SAndroid Build Coastguard Worker 
2130*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" x", flags, 1.0, &processed, &all_used));
2131*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2132*a6021da3SAndroid Build Coastguard Worker 
2133*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("42x", flags, 0.0, &processed, &all_used));
2134*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2135*a6021da3SAndroid Build Coastguard Worker 
2136*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("42 x", flags, 0.0, &processed, &all_used));
2137*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2138*a6021da3SAndroid Build Coastguard Worker 
2139*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 42 x", flags, 0.0, &processed, &all_used));
2140*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2141*a6021da3SAndroid Build Coastguard Worker 
2142*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 42 x", flags, 0.0, &processed, &all_used));
2143*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2144*a6021da3SAndroid Build Coastguard Worker 
2145*a6021da3SAndroid Build Coastguard Worker 
2146*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK;
2147*a6021da3SAndroid Build Coastguard Worker 
2148*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.0, StrToD("123e", flags, 0.0, &processed, &all_used));
2149*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 3);
2150*a6021da3SAndroid Build Coastguard Worker 
2151*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.0, StrToD("123e-", flags, 0.0, &processed, &all_used));
2152*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 3);
2153*a6021da3SAndroid Build Coastguard Worker 
2154*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.0, StrToD("123e-a", flags, 0.0, &processed, &all_used));
2155*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 3);
2156*a6021da3SAndroid Build Coastguard Worker 
2157*a6021da3SAndroid Build Coastguard Worker 
2158*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
2159*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
2160*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
2161*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
2162*a6021da3SAndroid Build Coastguard Worker 
2163*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2164*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2165*a6021da3SAndroid Build Coastguard Worker 
2166*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2167*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2168*a6021da3SAndroid Build Coastguard Worker 
2169*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("  ", flags, 0.0, &processed, &all_used));
2170*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2171*a6021da3SAndroid Build Coastguard Worker 
2172*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("  ", flags, 1.0, &processed, &all_used));
2173*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2174*a6021da3SAndroid Build Coastguard Worker 
2175*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42", flags, 0.0, &processed, &all_used));
2176*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2177*a6021da3SAndroid Build Coastguard Worker 
2178*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" + 42 ", flags, 0.0, &processed, &all_used));
2179*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2180*a6021da3SAndroid Build Coastguard Worker 
2181*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" - 42 ", flags, 0.0, &processed, &all_used));
2182*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2183*a6021da3SAndroid Build Coastguard Worker 
2184*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x", flags, 1.0, &processed, &all_used));
2185*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2186*a6021da3SAndroid Build Coastguard Worker 
2187*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" x", flags, 1.0, &processed, &all_used));
2188*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2189*a6021da3SAndroid Build Coastguard Worker 
2190*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42x", flags, 0.0, &processed, &all_used));
2191*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
2192*a6021da3SAndroid Build Coastguard Worker 
2193*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42 x", flags, 0.0, &processed, &all_used));
2194*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2195*a6021da3SAndroid Build Coastguard Worker 
2196*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" + 42 x", flags, 0.0, &processed, &all_used));
2197*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(6, processed);
2198*a6021da3SAndroid Build Coastguard Worker 
2199*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" - 42 x", flags, 0.0, &processed, &all_used));
2200*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(6, processed);
2201*a6021da3SAndroid Build Coastguard Worker 
2202*a6021da3SAndroid Build Coastguard Worker 
2203*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
2204*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
2205*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
2206*a6021da3SAndroid Build Coastguard Worker 
2207*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2208*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2209*a6021da3SAndroid Build Coastguard Worker 
2210*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2211*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2212*a6021da3SAndroid Build Coastguard Worker 
2213*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("  ", flags, 0.0, &processed, &all_used));
2214*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2215*a6021da3SAndroid Build Coastguard Worker 
2216*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("  ", flags, 1.0, &processed, &all_used));
2217*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2218*a6021da3SAndroid Build Coastguard Worker 
2219*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42", flags, 0.0, &processed, &all_used));
2220*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2221*a6021da3SAndroid Build Coastguard Worker 
2222*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" + 42 ", flags, 0.0, &processed, &all_used));
2223*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
2224*a6021da3SAndroid Build Coastguard Worker 
2225*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" - 42 ", flags, 0.0, &processed, &all_used));
2226*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
2227*a6021da3SAndroid Build Coastguard Worker 
2228*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x", flags, 1.0, &processed, &all_used));
2229*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2230*a6021da3SAndroid Build Coastguard Worker 
2231*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" x", flags, 1.0, &processed, &all_used));
2232*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2233*a6021da3SAndroid Build Coastguard Worker 
2234*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42x", flags, 0.0, &processed, &all_used));
2235*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
2236*a6021da3SAndroid Build Coastguard Worker 
2237*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42 x", flags, 0.0, &processed, &all_used));
2238*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
2239*a6021da3SAndroid Build Coastguard Worker 
2240*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" + 42 x", flags, 0.0, &processed, &all_used));
2241*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
2242*a6021da3SAndroid Build Coastguard Worker 
2243*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" - 42 x", flags, 0.0, &processed, &all_used));
2244*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
2245*a6021da3SAndroid Build Coastguard Worker 
2246*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
2247*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
2248*a6021da3SAndroid Build Coastguard Worker 
2249*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" +42 ", flags, 0.0, &processed, &all_used));
2250*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
2251*a6021da3SAndroid Build Coastguard Worker 
2252*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0, StrToD(" -42 ", flags, 0.0, &processed, &all_used));
2253*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
2254*a6021da3SAndroid Build Coastguard Worker 
2255*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 42 ", flags, 0.0, &processed, &all_used));
2256*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2257*a6021da3SAndroid Build Coastguard Worker 
2258*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 42 ", flags, 0.0, &processed, &all_used));
2259*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2260*a6021da3SAndroid Build Coastguard Worker 
2261*a6021da3SAndroid Build Coastguard Worker 
2262*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
2263*a6021da3SAndroid Build Coastguard Worker 
2264*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2265*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2266*a6021da3SAndroid Build Coastguard Worker 
2267*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2268*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2269*a6021da3SAndroid Build Coastguard Worker 
2270*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("  ", flags, 0.0, &processed, &all_used));
2271*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2272*a6021da3SAndroid Build Coastguard Worker 
2273*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("  ", flags, 1.0, &processed, &all_used));
2274*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2275*a6021da3SAndroid Build Coastguard Worker 
2276*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42", flags, 0.0, &processed, &all_used));
2277*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2278*a6021da3SAndroid Build Coastguard Worker 
2279*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 42 ", flags, 0.0, &processed, &all_used));
2280*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2281*a6021da3SAndroid Build Coastguard Worker 
2282*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 42 ", flags, 0.0, &processed, &all_used));
2283*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2284*a6021da3SAndroid Build Coastguard Worker 
2285*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x", flags, 1.0, &processed, &all_used));
2286*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2287*a6021da3SAndroid Build Coastguard Worker 
2288*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" x", flags, 1.0, &processed, &all_used));
2289*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2290*a6021da3SAndroid Build Coastguard Worker 
2291*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("42x", flags, 0.0, &processed, &all_used));
2292*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2293*a6021da3SAndroid Build Coastguard Worker 
2294*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("42 x", flags, 0.0, &processed, &all_used));
2295*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2296*a6021da3SAndroid Build Coastguard Worker 
2297*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 42 x", flags, 0.0, &processed, &all_used));
2298*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2299*a6021da3SAndroid Build Coastguard Worker 
2300*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 42 x", flags, 0.0, &processed, &all_used));
2301*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2302*a6021da3SAndroid Build Coastguard Worker 
2303*a6021da3SAndroid Build Coastguard Worker 
2304*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES;
2305*a6021da3SAndroid Build Coastguard Worker 
2306*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" ", flags, 0.0, &processed, &all_used));
2307*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2308*a6021da3SAndroid Build Coastguard Worker 
2309*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" ", flags, 1.0, &processed, &all_used));
2310*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2311*a6021da3SAndroid Build Coastguard Worker 
2312*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD(" 42", flags, 0.0, &processed, &all_used));
2313*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2314*a6021da3SAndroid Build Coastguard Worker 
2315*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("42 ", flags, 0.0, &processed, &all_used));
2316*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2317*a6021da3SAndroid Build Coastguard Worker 
2318*a6021da3SAndroid Build Coastguard Worker 
2319*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_SPACES;
2320*a6021da3SAndroid Build Coastguard Worker 
2321*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" ", flags, 0.0, &processed, &all_used));
2322*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2323*a6021da3SAndroid Build Coastguard Worker 
2324*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" ", flags, 1.0, &processed, &all_used));
2325*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2326*a6021da3SAndroid Build Coastguard Worker 
2327*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0, StrToD("42 ", flags, 0.0, &processed, &all_used));
2328*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2329*a6021da3SAndroid Build Coastguard Worker 
2330*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 42", flags, 0.0, &processed, &all_used));
2331*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2332*a6021da3SAndroid Build Coastguard Worker }
2333*a6021da3SAndroid Build Coastguard Worker 
2334*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleEmptyString)2335*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleEmptyString) {
2336*a6021da3SAndroid Build Coastguard Worker   int flags;
2337*a6021da3SAndroid Build Coastguard Worker   int processed;
2338*a6021da3SAndroid Build Coastguard Worker   bool all_used;
2339*a6021da3SAndroid Build Coastguard Worker 
2340*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
2341*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2342*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2343*a6021da3SAndroid Build Coastguard Worker 
2344*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2345*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2346*a6021da3SAndroid Build Coastguard Worker 
2347*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("", flags, Double::NaN(),
2348*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2349*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2350*a6021da3SAndroid Build Coastguard Worker 
2351*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 0.0, &processed, &all_used));
2352*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2353*a6021da3SAndroid Build Coastguard Worker 
2354*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 1.0, &processed, &all_used));
2355*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2356*a6021da3SAndroid Build Coastguard Worker 
2357*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2358*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2359*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2360*a6021da3SAndroid Build Coastguard Worker 
2361*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
2362*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2363*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2364*a6021da3SAndroid Build Coastguard Worker 
2365*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2366*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2367*a6021da3SAndroid Build Coastguard Worker 
2368*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("", flags, Double::NaN(),
2369*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2370*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2371*a6021da3SAndroid Build Coastguard Worker 
2372*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 0.0, &processed, &all_used));
2373*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2374*a6021da3SAndroid Build Coastguard Worker 
2375*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 1.0, &processed, &all_used));
2376*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2377*a6021da3SAndroid Build Coastguard Worker 
2378*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2379*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2380*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2381*a6021da3SAndroid Build Coastguard Worker 
2382*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES;
2383*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2384*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2385*a6021da3SAndroid Build Coastguard Worker 
2386*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2387*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2388*a6021da3SAndroid Build Coastguard Worker 
2389*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("", flags, Double::NaN(),
2390*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2391*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2392*a6021da3SAndroid Build Coastguard Worker 
2393*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" ", flags, 0.0, &processed, &all_used));
2394*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2395*a6021da3SAndroid Build Coastguard Worker 
2396*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" ", flags, 1.0, &processed, &all_used));
2397*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2398*a6021da3SAndroid Build Coastguard Worker 
2399*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2400*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2401*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2402*a6021da3SAndroid Build Coastguard Worker 
2403*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_SPACES;
2404*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2405*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2406*a6021da3SAndroid Build Coastguard Worker 
2407*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2408*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2409*a6021da3SAndroid Build Coastguard Worker 
2410*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("", flags, Double::NaN(),
2411*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2412*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2413*a6021da3SAndroid Build Coastguard Worker 
2414*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" ", flags, 0.0, &processed, &all_used));
2415*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2416*a6021da3SAndroid Build Coastguard Worker 
2417*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" ", flags, 1.0, &processed, &all_used));
2418*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2419*a6021da3SAndroid Build Coastguard Worker 
2420*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2421*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2422*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2423*a6021da3SAndroid Build Coastguard Worker 
2424*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK;
2425*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
2426*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2427*a6021da3SAndroid Build Coastguard Worker 
2428*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("", flags, 1.0, &processed, &all_used));
2429*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2430*a6021da3SAndroid Build Coastguard Worker 
2431*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("", flags, Double::NaN(),
2432*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2433*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2434*a6021da3SAndroid Build Coastguard Worker 
2435*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 0.0, &processed, &all_used));
2436*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2437*a6021da3SAndroid Build Coastguard Worker 
2438*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 1.0, &processed, &all_used));
2439*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2440*a6021da3SAndroid Build Coastguard Worker 
2441*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2442*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2443*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2444*a6021da3SAndroid Build Coastguard Worker 
2445*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x", flags, 0.0, &processed, &all_used));
2446*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2447*a6021da3SAndroid Build Coastguard Worker 
2448*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" x", flags, 0.0, &processed, &all_used));
2449*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2450*a6021da3SAndroid Build Coastguard Worker }
2451*a6021da3SAndroid Build Coastguard Worker 
2452*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleHexString)2453*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleHexString) {
2454*a6021da3SAndroid Build Coastguard Worker   int flags;
2455*a6021da3SAndroid Build Coastguard Worker   int processed;
2456*a6021da3SAndroid Build Coastguard Worker   bool all_used;
2457*a6021da3SAndroid Build Coastguard Worker 
2458*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX |
2459*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
2460*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
2461*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
2462*a6021da3SAndroid Build Coastguard Worker 
2463*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x12", flags, 0.0, &processed, &all_used));
2464*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2465*a6021da3SAndroid Build Coastguard Worker 
2466*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0", flags, 1.0, &processed, &all_used));
2467*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2468*a6021da3SAndroid Build Coastguard Worker 
2469*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2470*a6021da3SAndroid Build Coastguard Worker            StrToD("0x123456789", flags, Double::NaN(), &processed, &all_used));
2471*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2472*a6021da3SAndroid Build Coastguard Worker 
2473*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD(" 0x12 ", flags, 0.0, &processed, &all_used));
2474*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2475*a6021da3SAndroid Build Coastguard Worker 
2476*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 0x0 ", flags, 1.0, &processed, &all_used));
2477*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2478*a6021da3SAndroid Build Coastguard Worker 
2479*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2480*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x123456789 ", flags, Double::NaN(),
2481*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
2482*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2483*a6021da3SAndroid Build Coastguard Worker 
2484*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2485*a6021da3SAndroid Build Coastguard Worker            StrToD("0xabcdef", flags, 0.0, &processed, &all_used));
2486*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2487*a6021da3SAndroid Build Coastguard Worker 
2488*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2489*a6021da3SAndroid Build Coastguard Worker            StrToD("0xABCDEF", flags, 0.0, &processed, &all_used));
2490*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2491*a6021da3SAndroid Build Coastguard Worker 
2492*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2493*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabcdef ", flags, 0.0, &processed, &all_used));
2494*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2495*a6021da3SAndroid Build Coastguard Worker 
2496*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2497*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABCDEF ", flags, 0.0, &processed, &all_used));
2498*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2499*a6021da3SAndroid Build Coastguard Worker 
2500*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2501*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2502*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2503*a6021da3SAndroid Build Coastguard Worker 
2504*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0,
2505*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2506*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2507*a6021da3SAndroid Build Coastguard Worker 
2508*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x ", flags, 0.0,
2509*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2510*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2511*a6021da3SAndroid Build Coastguard Worker 
2512*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x 3", flags, 0.0,
2513*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2514*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2515*a6021da3SAndroid Build Coastguard Worker 
2516*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3g", flags, 0.0,
2517*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2518*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2519*a6021da3SAndroid Build Coastguard Worker 
2520*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3.23", flags, 0.0,
2521*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2522*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2523*a6021da3SAndroid Build Coastguard Worker 
2524*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x3", flags, 0.0,
2525*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2526*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2527*a6021da3SAndroid Build Coastguard Worker 
2528*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3 foo", flags, 0.0,
2529*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2530*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2531*a6021da3SAndroid Build Coastguard Worker 
2532*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x3 foo", flags, 0.0,
2533*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2534*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2535*a6021da3SAndroid Build Coastguard Worker 
2536*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 0x3 foo", flags, 0.0,
2537*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2538*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2539*a6021da3SAndroid Build Coastguard Worker 
2540*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+", flags, 0.0, &processed, &all_used));
2541*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2542*a6021da3SAndroid Build Coastguard Worker 
2543*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("-", flags, 0.0, &processed, &all_used));
2544*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2545*a6021da3SAndroid Build Coastguard Worker 
2546*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0, StrToD("-0x5", flags, 0.0, &processed, &all_used));
2547*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2548*a6021da3SAndroid Build Coastguard Worker 
2549*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0, StrToD(" - 0x5 ", flags, 0.0, &processed, &all_used));
2550*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2551*a6021da3SAndroid Build Coastguard Worker 
2552*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5.0, StrToD(" + 0x5 ", flags, 0.0, &processed, &all_used));
2553*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2554*a6021da3SAndroid Build Coastguard Worker 
2555*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- -0x5", flags, 0.0,  &processed, &all_used));
2556*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2557*a6021da3SAndroid Build Coastguard Worker 
2558*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- +0x5", flags, 0.0,  &processed, &all_used));
2559*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2560*a6021da3SAndroid Build Coastguard Worker 
2561*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ +0x5", flags, 0.0,  &processed, &all_used));
2562*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2563*a6021da3SAndroid Build Coastguard Worker 
2564*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX;
2565*a6021da3SAndroid Build Coastguard Worker 
2566*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x12", flags, 0.0, &processed, &all_used));
2567*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2568*a6021da3SAndroid Build Coastguard Worker 
2569*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0", flags, 1.0, &processed, &all_used));
2570*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2571*a6021da3SAndroid Build Coastguard Worker 
2572*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2573*a6021da3SAndroid Build Coastguard Worker            StrToD("0x123456789", flags, Double::NaN(), &processed, &all_used));
2574*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2575*a6021da3SAndroid Build Coastguard Worker 
2576*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x12 ", flags, 0.0, &processed, &all_used));
2577*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2578*a6021da3SAndroid Build Coastguard Worker 
2579*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x0 ", flags, 1.0, &processed, &all_used));
2580*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2581*a6021da3SAndroid Build Coastguard Worker 
2582*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x123456789 ", flags, Double::NaN(),
2583*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2584*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2585*a6021da3SAndroid Build Coastguard Worker 
2586*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2587*a6021da3SAndroid Build Coastguard Worker            StrToD("0xabcdef", flags, 0.0, &processed, &all_used));
2588*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2589*a6021da3SAndroid Build Coastguard Worker 
2590*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2591*a6021da3SAndroid Build Coastguard Worker            StrToD("0xABCDEF", flags, 0.0, &processed, &all_used));
2592*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2593*a6021da3SAndroid Build Coastguard Worker 
2594*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2595*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabcdef ", flags, 0.0, &processed, &all_used));
2596*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2597*a6021da3SAndroid Build Coastguard Worker 
2598*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2599*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABCDEF ", flags, 0.0, &processed, &all_used));
2600*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2601*a6021da3SAndroid Build Coastguard Worker 
2602*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2603*a6021da3SAndroid Build Coastguard Worker            StrToD(" ", flags, 0.0, &processed, &all_used));
2604*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2605*a6021da3SAndroid Build Coastguard Worker 
2606*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0,
2607*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2608*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2609*a6021da3SAndroid Build Coastguard Worker 
2610*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x ", flags, 0.0,
2611*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2612*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2613*a6021da3SAndroid Build Coastguard Worker 
2614*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x 3", flags, 0.0,
2615*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2616*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2617*a6021da3SAndroid Build Coastguard Worker 
2618*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3g", flags, 0.0,
2619*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2620*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2621*a6021da3SAndroid Build Coastguard Worker 
2622*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3.23", flags, 0.0,
2623*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2624*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2625*a6021da3SAndroid Build Coastguard Worker 
2626*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x3", flags, 0.0,
2627*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2628*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2629*a6021da3SAndroid Build Coastguard Worker 
2630*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 0x3 foo", flags, 0.0,
2631*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2632*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2633*a6021da3SAndroid Build Coastguard Worker 
2634*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+", flags, 0.0, &processed, &all_used));
2635*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2636*a6021da3SAndroid Build Coastguard Worker 
2637*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("-", flags, 0.0, &processed, &all_used));
2638*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2639*a6021da3SAndroid Build Coastguard Worker 
2640*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0, StrToD("-0x5", flags, 0.0, &processed, &all_used));
2641*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2642*a6021da3SAndroid Build Coastguard Worker 
2643*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 0x5 ", flags, 0.0, &processed, &all_used));
2644*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2645*a6021da3SAndroid Build Coastguard Worker 
2646*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 0x5 ", flags, 0.0, &processed, &all_used));
2647*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2648*a6021da3SAndroid Build Coastguard Worker 
2649*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- -0x5", flags, 0.0,  &processed, &all_used));
2650*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2651*a6021da3SAndroid Build Coastguard Worker 
2652*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- +0x5", flags, 0.0,  &processed, &all_used));
2653*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2654*a6021da3SAndroid Build Coastguard Worker 
2655*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ +0x5", flags, 0.0,  &processed, &all_used));
2656*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2657*a6021da3SAndroid Build Coastguard Worker 
2658*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK |
2659*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX;
2660*a6021da3SAndroid Build Coastguard Worker 
2661*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x12", flags, 0.0, &processed, &all_used));
2662*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2663*a6021da3SAndroid Build Coastguard Worker 
2664*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0", flags, 1.0, &processed, &all_used));
2665*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2666*a6021da3SAndroid Build Coastguard Worker 
2667*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2668*a6021da3SAndroid Build Coastguard Worker            StrToD("0x123456789", flags, Double::NaN(), &processed, &all_used));
2669*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2670*a6021da3SAndroid Build Coastguard Worker 
2671*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x12 ", flags, 0.0, &processed, &all_used));
2672*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2673*a6021da3SAndroid Build Coastguard Worker 
2674*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x0 ", flags, 1.0, &processed, &all_used));
2675*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2676*a6021da3SAndroid Build Coastguard Worker 
2677*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x12 ", flags, 0.0, &processed, &all_used));
2678*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
2679*a6021da3SAndroid Build Coastguard Worker 
2680*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0 ", flags, 1.0, &processed, &all_used));
2681*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2682*a6021da3SAndroid Build Coastguard Worker 
2683*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2684*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x123456789 ", flags, Double::NaN(),
2685*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
2686*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2687*a6021da3SAndroid Build Coastguard Worker 
2688*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2689*a6021da3SAndroid Build Coastguard Worker            StrToD("0xabcdef", flags, 0.0, &processed, &all_used));
2690*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2691*a6021da3SAndroid Build Coastguard Worker 
2692*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2693*a6021da3SAndroid Build Coastguard Worker            StrToD("0xABCDEF", flags, 0.0, &processed, &all_used));
2694*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2695*a6021da3SAndroid Build Coastguard Worker 
2696*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2697*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabcdef ", flags, 0.0, &processed, &all_used));
2698*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2699*a6021da3SAndroid Build Coastguard Worker 
2700*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2701*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABCDEF ", flags, 0.0, &processed, &all_used));
2702*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2703*a6021da3SAndroid Build Coastguard Worker 
2704*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2705*a6021da3SAndroid Build Coastguard Worker            StrToD("0xabcdef ", flags, 0.0, &processed, &all_used));
2706*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
2707*a6021da3SAndroid Build Coastguard Worker 
2708*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2709*a6021da3SAndroid Build Coastguard Worker            StrToD("0xABCDEF ", flags, 0.0, &processed, &all_used));
2710*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
2711*a6021da3SAndroid Build Coastguard Worker 
2712*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2713*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabcdef", flags, 0.0, &processed, &all_used));
2714*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2715*a6021da3SAndroid Build Coastguard Worker 
2716*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2717*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABCDEF", flags, 0.0, &processed, &all_used));
2718*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2719*a6021da3SAndroid Build Coastguard Worker 
2720*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 0.0, &processed, &all_used));
2721*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2722*a6021da3SAndroid Build Coastguard Worker 
2723*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0,
2724*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2725*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2726*a6021da3SAndroid Build Coastguard Worker 
2727*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x ", flags, 0.0,
2728*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2729*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2730*a6021da3SAndroid Build Coastguard Worker 
2731*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x 3", flags, 0.0,
2732*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2733*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2734*a6021da3SAndroid Build Coastguard Worker 
2735*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0, StrToD("0x3g", flags, 0.0, &processed, &all_used));
2736*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2737*a6021da3SAndroid Build Coastguard Worker 
2738*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0, StrToD("0x3.234", flags, 0.0, &processed, &all_used));
2739*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2740*a6021da3SAndroid Build Coastguard Worker 
2741*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x3g", flags, 0.0, &processed, &all_used));
2742*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2743*a6021da3SAndroid Build Coastguard Worker 
2744*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
2745*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x3.234", flags, 0.0, &processed, &all_used));
2746*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2747*a6021da3SAndroid Build Coastguard Worker 
2748*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x3", flags, 0.0,
2749*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2750*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2751*a6021da3SAndroid Build Coastguard Worker 
2752*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 0x3 foo", flags, 0.0,
2753*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2754*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2755*a6021da3SAndroid Build Coastguard Worker 
2756*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+", flags, 0.0, &processed, &all_used));
2757*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2758*a6021da3SAndroid Build Coastguard Worker 
2759*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("-", flags, 0.0, &processed, &all_used));
2760*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2761*a6021da3SAndroid Build Coastguard Worker 
2762*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0, StrToD("-0x5", flags, 0.0, &processed, &all_used));
2763*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2764*a6021da3SAndroid Build Coastguard Worker 
2765*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" - 0x5 ", flags, 0.0, &processed, &all_used));
2766*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2767*a6021da3SAndroid Build Coastguard Worker 
2768*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" + 0x5 ", flags, 0.0, &processed, &all_used));
2769*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2770*a6021da3SAndroid Build Coastguard Worker 
2771*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- -0x5", flags, 0.0,  &processed, &all_used));
2772*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2773*a6021da3SAndroid Build Coastguard Worker 
2774*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- +0x5", flags, 0.0,  &processed, &all_used));
2775*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2776*a6021da3SAndroid Build Coastguard Worker 
2777*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ +0x5", flags, 0.0,  &processed, &all_used));
2778*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2779*a6021da3SAndroid Build Coastguard Worker 
2780*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK |
2781*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
2782*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
2783*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
2784*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX;
2785*a6021da3SAndroid Build Coastguard Worker 
2786*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x12", flags, 0.0, &processed, &all_used));
2787*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2788*a6021da3SAndroid Build Coastguard Worker 
2789*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0", flags, 1.0, &processed, &all_used));
2790*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2791*a6021da3SAndroid Build Coastguard Worker 
2792*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2793*a6021da3SAndroid Build Coastguard Worker            StrToD("0x123456789", flags, Double::NaN(), &processed, &all_used));
2794*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2795*a6021da3SAndroid Build Coastguard Worker 
2796*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD(" 0x12 ", flags, 0.0, &processed, &all_used));
2797*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2798*a6021da3SAndroid Build Coastguard Worker 
2799*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 0x0 ", flags, 1.0, &processed, &all_used));
2800*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2801*a6021da3SAndroid Build Coastguard Worker 
2802*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2803*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x123456789 ", flags, Double::NaN(),
2804*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
2805*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2806*a6021da3SAndroid Build Coastguard Worker 
2807*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2808*a6021da3SAndroid Build Coastguard Worker            StrToD("0xabcdef", flags, 0.0, &processed, &all_used));
2809*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2810*a6021da3SAndroid Build Coastguard Worker 
2811*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2812*a6021da3SAndroid Build Coastguard Worker            StrToD("0xABCDEF", flags, 0.0, &processed, &all_used));
2813*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2814*a6021da3SAndroid Build Coastguard Worker 
2815*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2816*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabcdef ", flags, 0.0, &processed, &all_used));
2817*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2818*a6021da3SAndroid Build Coastguard Worker 
2819*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
2820*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABCDEF ", flags, 0.0, &processed, &all_used));
2821*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2822*a6021da3SAndroid Build Coastguard Worker 
2823*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabc),
2824*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xabc def ", flags, 0.0, &processed, &all_used));
2825*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(7, processed);
2826*a6021da3SAndroid Build Coastguard Worker 
2827*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabc),
2828*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0xABC DEF ", flags, 0.0, &processed, &all_used));
2829*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(7, processed);
2830*a6021da3SAndroid Build Coastguard Worker 
2831*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x12),
2832*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x12 ", flags, 0.0, &processed, &all_used));
2833*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2834*a6021da3SAndroid Build Coastguard Worker 
2835*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 0x0 ", flags, 1.0, &processed, &all_used));
2836*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2837*a6021da3SAndroid Build Coastguard Worker 
2838*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
2839*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x123456789 ", flags, Double::NaN(),
2840*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
2841*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2842*a6021da3SAndroid Build Coastguard Worker 
2843*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2844*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2845*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2846*a6021da3SAndroid Build Coastguard Worker 
2847*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0,
2848*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2849*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2850*a6021da3SAndroid Build Coastguard Worker 
2851*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x ", flags, 0.0,
2852*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2853*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2854*a6021da3SAndroid Build Coastguard Worker 
2855*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x 3", flags, 0.0,
2856*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2857*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2858*a6021da3SAndroid Build Coastguard Worker 
2859*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ((double)0x3, StrToD("0x3g", flags, 0.0, &processed, &all_used));
2860*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2861*a6021da3SAndroid Build Coastguard Worker 
2862*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ((double)0x3, StrToD("0x3.234", flags, 0.0, &processed, &all_used));
2863*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
2864*a6021da3SAndroid Build Coastguard Worker 
2865*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x3", flags, 0.0,
2866*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2867*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2868*a6021da3SAndroid Build Coastguard Worker 
2869*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.634002666912405e+27, StrToD("-0x123456789012345678901234",
2870*a6021da3SAndroid Build Coastguard Worker                                           flags, 0.0,
2871*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
2872*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2873*a6021da3SAndroid Build Coastguard Worker 
2874*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057594037927940.0, StrToD("0x100000000000001", flags, 0.0,
2875*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2876*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2877*a6021da3SAndroid Build Coastguard Worker 
2878*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057594037927940.0, StrToD("0x100000000000000", flags, 0.0,
2879*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2880*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2881*a6021da3SAndroid Build Coastguard Worker 
2882*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000000001", flags, 0.0,
2883*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2884*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2885*a6021da3SAndroid Build Coastguard Worker 
2886*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000000000", flags, 0.0,
2887*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2888*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2889*a6021da3SAndroid Build Coastguard Worker 
2890*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352900000.0, StrToD("0x100000000000008001", flags, 0.0,
2891*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2892*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2893*a6021da3SAndroid Build Coastguard Worker 
2894*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000008000", flags, 0.0,
2895*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2896*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2897*a6021da3SAndroid Build Coastguard Worker 
2898*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352960000.0, StrToD("0x100000000000018001", flags, 0.0,
2899*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2900*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2901*a6021da3SAndroid Build Coastguard Worker 
2902*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352960000.0, StrToD("0x100000000000018000", flags, 0.0,
2903*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2904*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2905*a6021da3SAndroid Build Coastguard Worker 
2906*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX_FLOATS;
2907*a6021da3SAndroid Build Coastguard Worker 
2908*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0, StrToD("0x3p0", flags, 0.0, &processed, &all_used));
2909*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2910*a6021da3SAndroid Build Coastguard Worker 
2911*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x.0p0", flags, 0.0, &processed, &all_used));
2912*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2913*a6021da3SAndroid Build Coastguard Worker 
2914*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0, StrToD("0x3.0p0", flags, 0.0, &processed, &all_used));
2915*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2916*a6021da3SAndroid Build Coastguard Worker 
2917*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0, StrToD("0x3.p0", flags, 0.0, &processed, &all_used));
2918*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2919*a6021da3SAndroid Build Coastguard Worker 
2920*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.634002666912405e+27, StrToD("-0x123456789012345678901234p0",
2921*a6021da3SAndroid Build Coastguard Worker                                           flags, 0.0,
2922*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
2923*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2924*a6021da3SAndroid Build Coastguard Worker 
2925*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057594037927940.0, StrToD("0x100000000000001p0", flags, 0.0,
2926*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2927*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2928*a6021da3SAndroid Build Coastguard Worker 
2929*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057594037927940.0, StrToD("0x100000000000000p0", flags, 0.0,
2930*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2931*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2932*a6021da3SAndroid Build Coastguard Worker 
2933*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000000001p0", flags, 0.0,
2934*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2935*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2936*a6021da3SAndroid Build Coastguard Worker 
2937*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000000000p0", flags, 0.0,
2938*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2939*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2940*a6021da3SAndroid Build Coastguard Worker 
2941*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352900000.0, StrToD("0x100000000000008001p0", flags, 0.0,
2942*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2943*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2944*a6021da3SAndroid Build Coastguard Worker 
2945*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352830000.0, StrToD("0x100000000000008000p0", flags, 0.0,
2946*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2947*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2948*a6021da3SAndroid Build Coastguard Worker 
2949*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352960000.0, StrToD("0x100000000000018001p0", flags, 0.0,
2950*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2951*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2952*a6021da3SAndroid Build Coastguard Worker 
2953*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(295147905179352960000.0, StrToD("0x100000000000018000p0", flags, 0.0,
2954*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2955*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2956*a6021da3SAndroid Build Coastguard Worker 
2957*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4.722366482869645e+21, StrToD("0x100000000000000001p4", flags, 0.0,
2958*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2959*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2960*a6021da3SAndroid Build Coastguard Worker 
2961*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4.722366482869645e+21, StrToD("0x100000000000000000p+4", flags, 0.0,
2962*a6021da3SAndroid Build Coastguard Worker                                        &processed, &all_used));
2963*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2964*a6021da3SAndroid Build Coastguard Worker 
2965*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4.722366482869646e+21, StrToD("0x100000000000008001p04", flags, 0.0,
2966*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2967*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2968*a6021da3SAndroid Build Coastguard Worker 
2969*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18446744073709552000.0, StrToD("0x100000000000008000p-4", flags, 0.0,
2970*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2971*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2972*a6021da3SAndroid Build Coastguard Worker 
2973*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18446744073709560000.0, StrToD("0x100000000000018001p-04", flags, 0.0,
2974*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2975*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2976*a6021da3SAndroid Build Coastguard Worker 
2977*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4.722366482869647e+21, StrToD("0x100000000000018000p4", flags, 0.0,
2978*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
2979*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2980*a6021da3SAndroid Build Coastguard Worker 
2981*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::Infinity(), StrToD("0x1p2000", flags, 0.0,
2982*a6021da3SAndroid Build Coastguard Worker                                       &processed, &all_used));
2983*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2984*a6021da3SAndroid Build Coastguard Worker 
2985*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x1p-2000", flags, 0.0, &processed, &all_used));
2986*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2987*a6021da3SAndroid Build Coastguard Worker 
2988*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-0.0, StrToD("-0x1p-2000", flags, 0.0, &processed, &all_used));
2989*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
2990*a6021da3SAndroid Build Coastguard Worker 
2991*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, Double::NaN(),
2992*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2993*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2994*a6021da3SAndroid Build Coastguard Worker 
2995*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0,
2996*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
2997*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
2998*a6021da3SAndroid Build Coastguard Worker 
2999*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x ", flags, 0.0,
3000*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3001*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3002*a6021da3SAndroid Build Coastguard Worker 
3003*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x 3", flags, 0.0,
3004*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3005*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3006*a6021da3SAndroid Build Coastguard Worker 
3007*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3g", flags, 0.0,
3008*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3009*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3010*a6021da3SAndroid Build Coastguard Worker 
3011*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("x3", flags, 0.0,
3012*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3013*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3014*a6021da3SAndroid Build Coastguard Worker 
3015*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x3 foo", flags, 0.0,
3016*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3017*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3018*a6021da3SAndroid Build Coastguard Worker 
3019*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0x3 foo", flags, 0.0,
3020*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3021*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3022*a6021da3SAndroid Build Coastguard Worker 
3023*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 0x3 foo", flags, 0.0,
3024*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3025*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3026*a6021da3SAndroid Build Coastguard Worker 
3027*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+", flags, 0.0, &processed, &all_used));
3028*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3029*a6021da3SAndroid Build Coastguard Worker 
3030*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("-", flags, 0.0, &processed, &all_used));
3031*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3032*a6021da3SAndroid Build Coastguard Worker 
3033*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- -0x5", flags, 0.0,  &processed, &all_used));
3034*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3035*a6021da3SAndroid Build Coastguard Worker 
3036*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- +0x5", flags, 0.0,  &processed, &all_used));
3037*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3038*a6021da3SAndroid Build Coastguard Worker 
3039*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ +0x5", flags, 0.0,  &processed, &all_used));
3040*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3041*a6021da3SAndroid Build Coastguard Worker 
3042*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0xp1", flags, 0.0, &processed, &all_used));
3043*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3044*a6021da3SAndroid Build Coastguard Worker 
3045*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x.p1", flags, 0.0, &processed, &all_used));
3046*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3047*a6021da3SAndroid Build Coastguard Worker 
3048*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::Infinity(), StrToD("0x1.p10000000000000000", flags, 0.0,
3049*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3050*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3051*a6021da3SAndroid Build Coastguard Worker 
3052*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x1.p-10000000000000000", flags, 0.0,
3053*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
3054*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3055*a6021da3SAndroid Build Coastguard Worker }
3056*a6021da3SAndroid Build Coastguard Worker 
3057*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleOctalString)3058*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleOctalString) {
3059*a6021da3SAndroid Build Coastguard Worker   int flags;
3060*a6021da3SAndroid Build Coastguard Worker   int processed;
3061*a6021da3SAndroid Build Coastguard Worker   bool all_used;
3062*a6021da3SAndroid Build Coastguard Worker 
3063*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
3064*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
3065*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
3066*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
3067*a6021da3SAndroid Build Coastguard Worker 
3068*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 0.0, &processed, &all_used));
3069*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3070*a6021da3SAndroid Build Coastguard Worker 
3071*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00", flags, 1.0, &processed, &all_used));
3072*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3073*a6021da3SAndroid Build Coastguard Worker 
3074*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 1.0, &processed, &all_used));
3075*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3076*a6021da3SAndroid Build Coastguard Worker 
3077*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3078*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789", flags, Double::NaN(), &processed, &all_used));
3079*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3080*a6021da3SAndroid Build Coastguard Worker 
3081*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3082*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567", flags, Double::NaN(), &processed, &all_used));
3083*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3084*a6021da3SAndroid Build Coastguard Worker 
3085*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3086*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3087*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3088*a6021da3SAndroid Build Coastguard Worker 
3089*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3090*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3091*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3092*a6021da3SAndroid Build Coastguard Worker 
3093*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD(" 012", flags, 0.0, &processed, &all_used));
3094*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3095*a6021da3SAndroid Build Coastguard Worker 
3096*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("\n012", flags, 0.0, &processed, &all_used));
3097*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3098*a6021da3SAndroid Build Coastguard Worker 
3099*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 00", flags, 1.0, &processed, &all_used));
3100*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3101*a6021da3SAndroid Build Coastguard Worker 
3102*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("\t00", flags, 1.0, &processed, &all_used));
3103*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3104*a6021da3SAndroid Build Coastguard Worker 
3105*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD(" 012", flags, 1.0, &processed, &all_used));
3106*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3107*a6021da3SAndroid Build Coastguard Worker 
3108*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("\n012", flags, 1.0, &processed, &all_used));
3109*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3110*a6021da3SAndroid Build Coastguard Worker 
3111*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3112*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789", flags, Double::NaN(), &processed, &all_used));
3113*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3114*a6021da3SAndroid Build Coastguard Worker 
3115*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3116*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567", flags, Double::NaN(), &processed, &all_used));
3117*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3118*a6021da3SAndroid Build Coastguard Worker 
3119*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3120*a6021da3SAndroid Build Coastguard Worker            StrToD("\n01234567", flags, Double::NaN(), &processed, &all_used));
3121*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3122*a6021da3SAndroid Build Coastguard Worker 
3123*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3124*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567", flags, Double::NaN(), &processed, &all_used));
3125*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3126*a6021da3SAndroid Build Coastguard Worker 
3127*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3128*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567", flags, Double::NaN(), &processed, &all_used));
3129*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3130*a6021da3SAndroid Build Coastguard Worker 
3131*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3132*a6021da3SAndroid Build Coastguard Worker            StrToD("\n-\t01234567", flags, Double::NaN(), &processed, &all_used));
3133*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3134*a6021da3SAndroid Build Coastguard Worker 
3135*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD(" 012 ", flags, 0.0, &processed, &all_used));
3136*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3137*a6021da3SAndroid Build Coastguard Worker 
3138*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 00 ", flags, 1.0, &processed, &all_used));
3139*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3140*a6021da3SAndroid Build Coastguard Worker 
3141*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD(" 012 ", flags, 1.0, &processed, &all_used));
3142*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3143*a6021da3SAndroid Build Coastguard Worker 
3144*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3145*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789 ", flags, Double::NaN(), &processed, &all_used));
3146*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3147*a6021da3SAndroid Build Coastguard Worker 
3148*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3149*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567 ", flags, Double::NaN(), &processed, &all_used));
3150*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3151*a6021da3SAndroid Build Coastguard Worker 
3152*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3153*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567 ", flags, Double::NaN(), &processed, &all_used));
3154*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3155*a6021da3SAndroid Build Coastguard Worker 
3156*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3157*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567 ", flags, Double::NaN(), &processed, &all_used));
3158*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3159*a6021da3SAndroid Build Coastguard Worker 
3160*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 ", flags, 0.0, &processed, &all_used));
3161*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3162*a6021da3SAndroid Build Coastguard Worker 
3163*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00 ", flags, 1.0, &processed, &all_used));
3164*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3165*a6021da3SAndroid Build Coastguard Worker 
3166*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 ", flags, 1.0, &processed, &all_used));
3167*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3168*a6021da3SAndroid Build Coastguard Worker 
3169*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3170*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 ", flags, Double::NaN(), &processed, &all_used));
3171*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3172*a6021da3SAndroid Build Coastguard Worker 
3173*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3174*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 ", flags, Double::NaN(), &processed, &all_used));
3175*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3176*a6021da3SAndroid Build Coastguard Worker 
3177*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3178*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3179*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3180*a6021da3SAndroid Build Coastguard Worker 
3181*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3182*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3183*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3184*a6021da3SAndroid Build Coastguard Worker 
3185*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3186*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567e0", flags, Double::NaN(), &processed, &all_used));
3187*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3188*a6021da3SAndroid Build Coastguard Worker 
3189*a6021da3SAndroid Build Coastguard Worker 
3190*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS;
3191*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 0.0, &processed, &all_used));
3192*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3193*a6021da3SAndroid Build Coastguard Worker 
3194*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00", flags, 1.0, &processed, &all_used));
3195*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3196*a6021da3SAndroid Build Coastguard Worker 
3197*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 1.0, &processed, &all_used));
3198*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3199*a6021da3SAndroid Build Coastguard Worker 
3200*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3201*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789", flags, Double::NaN(), &processed, &all_used));
3202*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3203*a6021da3SAndroid Build Coastguard Worker 
3204*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3205*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567", flags, Double::NaN(), &processed, &all_used));
3206*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3207*a6021da3SAndroid Build Coastguard Worker 
3208*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3209*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3210*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3211*a6021da3SAndroid Build Coastguard Worker 
3212*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3213*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3214*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3215*a6021da3SAndroid Build Coastguard Worker 
3216*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 0.0, &processed, &all_used));
3217*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3218*a6021da3SAndroid Build Coastguard Worker 
3219*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00", flags, 1.0, &processed, &all_used));
3220*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3221*a6021da3SAndroid Build Coastguard Worker 
3222*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 1.0, &processed, &all_used));
3223*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3224*a6021da3SAndroid Build Coastguard Worker 
3225*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3226*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789", flags, Double::NaN(), &processed, &all_used));
3227*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3228*a6021da3SAndroid Build Coastguard Worker 
3229*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3230*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567", flags, Double::NaN(), &processed, &all_used));
3231*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3232*a6021da3SAndroid Build Coastguard Worker 
3233*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3234*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567", flags, Double::NaN(), &processed, &all_used));
3235*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3236*a6021da3SAndroid Build Coastguard Worker 
3237*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3238*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567", flags, Double::NaN(), &processed, &all_used));
3239*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3240*a6021da3SAndroid Build Coastguard Worker 
3241*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 0.0, &processed, &all_used));
3242*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3243*a6021da3SAndroid Build Coastguard Worker 
3244*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00 ", flags, 1.0, &processed, &all_used));
3245*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3246*a6021da3SAndroid Build Coastguard Worker 
3247*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 1.0, &processed, &all_used));
3248*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3249*a6021da3SAndroid Build Coastguard Worker 
3250*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3251*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789 ", flags, Double::NaN(), &processed, &all_used));
3252*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3253*a6021da3SAndroid Build Coastguard Worker 
3254*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3255*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567 ", flags, Double::NaN(), &processed, &all_used));
3256*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3257*a6021da3SAndroid Build Coastguard Worker 
3258*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3259*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567 ", flags, Double::NaN(), &processed, &all_used));
3260*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3261*a6021da3SAndroid Build Coastguard Worker 
3262*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3263*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567 ", flags, Double::NaN(), &processed, &all_used));
3264*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3265*a6021da3SAndroid Build Coastguard Worker 
3266*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("012 ", flags, 0.0, &processed, &all_used));
3267*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3268*a6021da3SAndroid Build Coastguard Worker 
3269*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("00 ", flags, 1.0, &processed, &all_used));
3270*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3271*a6021da3SAndroid Build Coastguard Worker 
3272*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("012 ", flags, 1.0, &processed, &all_used));
3273*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3274*a6021da3SAndroid Build Coastguard Worker 
3275*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3276*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 ", flags, Double::NaN(), &processed, &all_used));
3277*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3278*a6021da3SAndroid Build Coastguard Worker 
3279*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3280*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 ", flags, Double::NaN(), &processed, &all_used));
3281*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3282*a6021da3SAndroid Build Coastguard Worker 
3283*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3284*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3285*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3286*a6021da3SAndroid Build Coastguard Worker 
3287*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3288*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3289*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3290*a6021da3SAndroid Build Coastguard Worker 
3291*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3292*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567e0", flags, Double::NaN(), &processed, &all_used));
3293*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3294*a6021da3SAndroid Build Coastguard Worker 
3295*a6021da3SAndroid Build Coastguard Worker 
3296*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
3297*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
3298*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 0.0, &processed, &all_used));
3299*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3300*a6021da3SAndroid Build Coastguard Worker 
3301*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00", flags, 1.0, &processed, &all_used));
3302*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3303*a6021da3SAndroid Build Coastguard Worker 
3304*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 1.0, &processed, &all_used));
3305*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3306*a6021da3SAndroid Build Coastguard Worker 
3307*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3308*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789", flags, Double::NaN(), &processed, &all_used));
3309*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3310*a6021da3SAndroid Build Coastguard Worker 
3311*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3312*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567", flags, Double::NaN(), &processed, &all_used));
3313*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3314*a6021da3SAndroid Build Coastguard Worker 
3315*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3316*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3317*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3318*a6021da3SAndroid Build Coastguard Worker 
3319*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3320*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3321*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3322*a6021da3SAndroid Build Coastguard Worker 
3323*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 0.0, &processed, &all_used));
3324*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3325*a6021da3SAndroid Build Coastguard Worker 
3326*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00", flags, 1.0, &processed, &all_used));
3327*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3328*a6021da3SAndroid Build Coastguard Worker 
3329*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 1.0, &processed, &all_used));
3330*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3331*a6021da3SAndroid Build Coastguard Worker 
3332*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3333*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789", flags, Double::NaN(), &processed, &all_used));
3334*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3335*a6021da3SAndroid Build Coastguard Worker 
3336*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3337*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567", flags, Double::NaN(), &processed, &all_used));
3338*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3339*a6021da3SAndroid Build Coastguard Worker 
3340*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3341*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567", flags, Double::NaN(), &processed, &all_used));
3342*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3343*a6021da3SAndroid Build Coastguard Worker 
3344*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3345*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567", flags, Double::NaN(), &processed, &all_used));
3346*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3347*a6021da3SAndroid Build Coastguard Worker 
3348*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 0.0, &processed, &all_used));
3349*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3350*a6021da3SAndroid Build Coastguard Worker 
3351*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00 ", flags, 1.0, &processed, &all_used));
3352*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3353*a6021da3SAndroid Build Coastguard Worker 
3354*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 1.0, &processed, &all_used));
3355*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3356*a6021da3SAndroid Build Coastguard Worker 
3357*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3358*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789 ", flags, Double::NaN(), &processed, &all_used));
3359*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3360*a6021da3SAndroid Build Coastguard Worker 
3361*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3362*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567 ", flags, Double::NaN(), &processed, &all_used));
3363*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3364*a6021da3SAndroid Build Coastguard Worker 
3365*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3366*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567 ", flags, Double::NaN(), &processed, &all_used));
3367*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3368*a6021da3SAndroid Build Coastguard Worker 
3369*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3370*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567 ", flags, Double::NaN(), &processed, &all_used));
3371*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3372*a6021da3SAndroid Build Coastguard Worker 
3373*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 ", flags, 0.0, &processed, &all_used));
3374*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
3375*a6021da3SAndroid Build Coastguard Worker 
3376*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00 ", flags, 1.0, &processed, &all_used));
3377*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
3378*a6021da3SAndroid Build Coastguard Worker 
3379*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3380*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 ", flags, Double::NaN(), &processed, &all_used));
3381*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3382*a6021da3SAndroid Build Coastguard Worker 
3383*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3384*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 ", flags, Double::NaN(), &processed, &all_used));
3385*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3386*a6021da3SAndroid Build Coastguard Worker 
3387*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3388*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3389*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3390*a6021da3SAndroid Build Coastguard Worker 
3391*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3392*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3393*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3394*a6021da3SAndroid Build Coastguard Worker 
3395*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012foo ", flags, 0.0, &processed, &all_used));
3396*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
3397*a6021da3SAndroid Build Coastguard Worker 
3398*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00foo ", flags, 1.0, &processed, &all_used));
3399*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
3400*a6021da3SAndroid Build Coastguard Worker 
3401*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3402*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789foo ", flags, Double::NaN(),
3403*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3404*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3405*a6021da3SAndroid Build Coastguard Worker 
3406*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3407*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567foo ", flags, Double::NaN(), &processed, &all_used));
3408*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3409*a6021da3SAndroid Build Coastguard Worker 
3410*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3411*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567foo", flags, Double::NaN(), &processed, &all_used));
3412*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3413*a6021da3SAndroid Build Coastguard Worker 
3414*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3415*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567foo", flags, Double::NaN(), &processed, &all_used));
3416*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3417*a6021da3SAndroid Build Coastguard Worker 
3418*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 foo ", flags, 0.0, &processed, &all_used));
3419*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
3420*a6021da3SAndroid Build Coastguard Worker 
3421*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00 foo ", flags, 1.0, &processed, &all_used));
3422*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
3423*a6021da3SAndroid Build Coastguard Worker 
3424*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3425*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 foo ", flags, Double::NaN(),
3426*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3427*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3428*a6021da3SAndroid Build Coastguard Worker 
3429*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3430*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 foo ", flags, Double::NaN(),
3431*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3432*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3433*a6021da3SAndroid Build Coastguard Worker 
3434*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3435*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567 foo", flags, Double::NaN(),
3436*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3437*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3438*a6021da3SAndroid Build Coastguard Worker 
3439*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3440*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567 foo", flags, Double::NaN(), &processed,
3441*a6021da3SAndroid Build Coastguard Worker                   &all_used));
3442*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3443*a6021da3SAndroid Build Coastguard Worker 
3444*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3445*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567e0", flags, Double::NaN(), &processed, &all_used));
3446*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3447*a6021da3SAndroid Build Coastguard Worker 
3448*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3449*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567e", flags, Double::NaN(), &processed, &all_used));
3450*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3451*a6021da3SAndroid Build Coastguard Worker 
3452*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
3453*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
3454*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
3455*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 0.0, &processed, &all_used));
3456*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3457*a6021da3SAndroid Build Coastguard Worker 
3458*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00", flags, 1.0, &processed, &all_used));
3459*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3460*a6021da3SAndroid Build Coastguard Worker 
3461*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012", flags, 1.0, &processed, &all_used));
3462*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3463*a6021da3SAndroid Build Coastguard Worker 
3464*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3465*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789", flags, Double::NaN(), &processed, &all_used));
3466*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3467*a6021da3SAndroid Build Coastguard Worker 
3468*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3469*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567", flags, Double::NaN(), &processed, &all_used));
3470*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3471*a6021da3SAndroid Build Coastguard Worker 
3472*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3473*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3474*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3475*a6021da3SAndroid Build Coastguard Worker 
3476*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3477*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3478*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3479*a6021da3SAndroid Build Coastguard Worker 
3480*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 0.0, &processed, &all_used));
3481*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3482*a6021da3SAndroid Build Coastguard Worker 
3483*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00", flags, 1.0, &processed, &all_used));
3484*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3485*a6021da3SAndroid Build Coastguard Worker 
3486*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012", flags, 1.0, &processed, &all_used));
3487*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3488*a6021da3SAndroid Build Coastguard Worker 
3489*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3490*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789", flags, Double::NaN(), &processed, &all_used));
3491*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3492*a6021da3SAndroid Build Coastguard Worker 
3493*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3494*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567", flags, Double::NaN(), &processed, &all_used));
3495*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3496*a6021da3SAndroid Build Coastguard Worker 
3497*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3498*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567", flags, Double::NaN(), &processed, &all_used));
3499*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3500*a6021da3SAndroid Build Coastguard Worker 
3501*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3502*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567", flags, Double::NaN(), &processed, &all_used));
3503*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3504*a6021da3SAndroid Build Coastguard Worker 
3505*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 0.0, &processed, &all_used));
3506*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3507*a6021da3SAndroid Build Coastguard Worker 
3508*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 00 ", flags, 1.0, &processed, &all_used));
3509*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3510*a6021da3SAndroid Build Coastguard Worker 
3511*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 012 ", flags, 1.0, &processed, &all_used));
3512*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3513*a6021da3SAndroid Build Coastguard Worker 
3514*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3515*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0123456789 ", flags, Double::NaN(), &processed, &all_used));
3516*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3517*a6021da3SAndroid Build Coastguard Worker 
3518*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3519*a6021da3SAndroid Build Coastguard Worker            StrToD(" 01234567 ", flags, Double::NaN(), &processed, &all_used));
3520*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3521*a6021da3SAndroid Build Coastguard Worker 
3522*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3523*a6021da3SAndroid Build Coastguard Worker            StrToD(" + 01234567 ", flags, Double::NaN(), &processed, &all_used));
3524*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3525*a6021da3SAndroid Build Coastguard Worker 
3526*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3527*a6021da3SAndroid Build Coastguard Worker            StrToD(" - 01234567 ", flags, Double::NaN(), &processed, &all_used));
3528*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3529*a6021da3SAndroid Build Coastguard Worker 
3530*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 ", flags, 0.0, &processed, &all_used));
3531*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3532*a6021da3SAndroid Build Coastguard Worker 
3533*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00 ", flags, 1.0, &processed, &all_used));
3534*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3535*a6021da3SAndroid Build Coastguard Worker 
3536*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3537*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 ", flags, Double::NaN(), &processed, &all_used));
3538*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3539*a6021da3SAndroid Build Coastguard Worker 
3540*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3541*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 ", flags, Double::NaN(), &processed, &all_used));
3542*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3543*a6021da3SAndroid Build Coastguard Worker 
3544*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3545*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567", flags, Double::NaN(), &processed, &all_used));
3546*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3547*a6021da3SAndroid Build Coastguard Worker 
3548*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3549*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567", flags, Double::NaN(), &processed, &all_used));
3550*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3551*a6021da3SAndroid Build Coastguard Worker 
3552*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012foo ", flags, 0.0, &processed, &all_used));
3553*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
3554*a6021da3SAndroid Build Coastguard Worker 
3555*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00foo ", flags, 1.0, &processed, &all_used));
3556*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
3557*a6021da3SAndroid Build Coastguard Worker 
3558*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3559*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789foo ", flags, Double::NaN(),
3560*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3561*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3562*a6021da3SAndroid Build Coastguard Worker 
3563*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3564*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567foo ", flags, Double::NaN(), &processed, &all_used));
3565*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
3566*a6021da3SAndroid Build Coastguard Worker 
3567*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3568*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567foo", flags, Double::NaN(), &processed, &all_used));
3569*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3570*a6021da3SAndroid Build Coastguard Worker 
3571*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3572*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567foo", flags, Double::NaN(), &processed, &all_used));
3573*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3574*a6021da3SAndroid Build Coastguard Worker 
3575*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("012 foo ", flags, 0.0, &processed, &all_used));
3576*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
3577*a6021da3SAndroid Build Coastguard Worker 
3578*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("00 foo ", flags, 1.0, &processed, &all_used));
3579*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
3580*a6021da3SAndroid Build Coastguard Worker 
3581*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0,
3582*a6021da3SAndroid Build Coastguard Worker            StrToD("0123456789 foo ", flags, Double::NaN(),
3583*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3584*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(11, processed);
3585*a6021da3SAndroid Build Coastguard Worker 
3586*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3587*a6021da3SAndroid Build Coastguard Worker            StrToD("01234567 foo ", flags, Double::NaN(),
3588*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3589*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
3590*a6021da3SAndroid Build Coastguard Worker 
3591*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0,
3592*a6021da3SAndroid Build Coastguard Worker            StrToD("+01234567 foo", flags, Double::NaN(),
3593*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3594*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3595*a6021da3SAndroid Build Coastguard Worker 
3596*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0,
3597*a6021da3SAndroid Build Coastguard Worker            StrToD("-01234567 foo", flags, Double::NaN(),
3598*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
3599*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
3600*a6021da3SAndroid Build Coastguard Worker }
3601*a6021da3SAndroid Build Coastguard Worker 
3602*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleSeparator)3603*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleSeparator) {
3604*a6021da3SAndroid Build Coastguard Worker   int flags;
3605*a6021da3SAndroid Build Coastguard Worker   int processed;
3606*a6021da3SAndroid Build Coastguard Worker   bool all_used;
3607*a6021da3SAndroid Build Coastguard Worker   uc16 separator;
3608*a6021da3SAndroid Build Coastguard Worker 
3609*a6021da3SAndroid Build Coastguard Worker   separator = '\'';
3610*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
3611*a6021da3SAndroid Build Coastguard Worker 
3612*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("000'001.0'0", flags, 0.0,
3613*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3614*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3615*a6021da3SAndroid Build Coastguard Worker 
3616*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("0'0'0'0'0'1.0'0", flags, 0.0,
3617*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3618*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3619*a6021da3SAndroid Build Coastguard Worker 
3620*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("'1.0", flags, 0.0,
3621*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3622*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3623*a6021da3SAndroid Build Coastguard Worker 
3624*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1'.0", flags, 0.0,
3625*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3626*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3627*a6021da3SAndroid Build Coastguard Worker 
3628*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.'0", flags, 0.0,
3629*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3630*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3631*a6021da3SAndroid Build Coastguard Worker 
3632*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0''1.0", flags, 0.0,
3633*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3634*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3635*a6021da3SAndroid Build Coastguard Worker 
3636*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e1'0", flags, 0.0,
3637*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3638*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3639*a6021da3SAndroid Build Coastguard Worker 
3640*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e1'", flags, 0.0,
3641*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3642*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3643*a6021da3SAndroid Build Coastguard Worker 
3644*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e'1", flags, 0.0,
3645*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3646*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3647*a6021da3SAndroid Build Coastguard Worker 
3648*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0'e1", flags, 0.0,
3649*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3650*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3651*a6021da3SAndroid Build Coastguard Worker 
3652*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+'1.0e1", flags, 0.0,
3653*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3654*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3655*a6021da3SAndroid Build Coastguard Worker 
3656*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("-'1.0e1", flags, 0.0,
3657*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3658*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3659*a6021da3SAndroid Build Coastguard Worker 
3660*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e+'1", flags, 0.0,
3661*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3662*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3663*a6021da3SAndroid Build Coastguard Worker 
3664*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e-'1", flags, 0.0,
3665*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3666*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3667*a6021da3SAndroid Build Coastguard Worker 
3668*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e'+1", flags, 0.0,
3669*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3670*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3671*a6021da3SAndroid Build Coastguard Worker 
3672*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e'-1", flags, 0.0,
3673*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3674*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3675*a6021da3SAndroid Build Coastguard Worker 
3676*a6021da3SAndroid Build Coastguard Worker   separator = ' ';
3677*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
3678*a6021da3SAndroid Build Coastguard Worker 
3679*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("000 001.0 0", flags, 0.0,
3680*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3681*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3682*a6021da3SAndroid Build Coastguard Worker 
3683*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("0 0 0 0 0 1.0 0", flags, 0.0,
3684*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3685*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3686*a6021da3SAndroid Build Coastguard Worker 
3687*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 1.0", flags, 0.0,
3688*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3689*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3690*a6021da3SAndroid Build Coastguard Worker 
3691*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1 .0", flags, 0.0,
3692*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3693*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3694*a6021da3SAndroid Build Coastguard Worker 
3695*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1. 0", flags, 0.0,
3696*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3697*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3698*a6021da3SAndroid Build Coastguard Worker 
3699*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0  1.0", flags, 0.0,
3700*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3701*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3702*a6021da3SAndroid Build Coastguard Worker 
3703*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e1 0", flags, 0.0,
3704*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3705*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3706*a6021da3SAndroid Build Coastguard Worker 
3707*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e1 ", flags, 0.0,
3708*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3709*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3710*a6021da3SAndroid Build Coastguard Worker 
3711*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e 1", flags, 0.0,
3712*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3713*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3714*a6021da3SAndroid Build Coastguard Worker 
3715*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0 e1", flags, 0.0,
3716*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3717*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3718*a6021da3SAndroid Build Coastguard Worker 
3719*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 1.0e1", flags, 0.0,
3720*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3721*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3722*a6021da3SAndroid Build Coastguard Worker 
3723*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- 1.0e1", flags, 0.0,
3724*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3725*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3726*a6021da3SAndroid Build Coastguard Worker 
3727*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e+ 1", flags, 0.0,
3728*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3729*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3730*a6021da3SAndroid Build Coastguard Worker 
3731*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e- 1", flags, 0.0,
3732*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3733*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3734*a6021da3SAndroid Build Coastguard Worker 
3735*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e +1", flags, 0.0,
3736*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3737*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3738*a6021da3SAndroid Build Coastguard Worker 
3739*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e -1", flags, 0.0,
3740*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3741*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3742*a6021da3SAndroid Build Coastguard Worker 
3743*a6021da3SAndroid Build Coastguard Worker   separator = ' ';
3744*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
3745*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES;
3746*a6021da3SAndroid Build Coastguard Worker 
3747*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("000 001.0 0", flags, 0.0,
3748*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3749*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3750*a6021da3SAndroid Build Coastguard Worker 
3751*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("0 0 0 0 0 1.0 0", flags, 0.0,
3752*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3753*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3754*a6021da3SAndroid Build Coastguard Worker 
3755*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("  000 001.0 0   ", flags, 0.0,
3756*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3757*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3758*a6021da3SAndroid Build Coastguard Worker 
3759*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD("   0 0 0 0 0 1.0 0   ", flags, 0.0,
3760*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3761*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3762*a6021da3SAndroid Build Coastguard Worker 
3763*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" 1.0", flags, 0.0,
3764*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3765*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3766*a6021da3SAndroid Build Coastguard Worker 
3767*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1 .0", flags, 0.0,
3768*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3769*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3770*a6021da3SAndroid Build Coastguard Worker 
3771*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1. 0", flags, 0.0,
3772*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3773*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3774*a6021da3SAndroid Build Coastguard Worker 
3775*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0  1.0", flags, 0.0,
3776*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3777*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3778*a6021da3SAndroid Build Coastguard Worker 
3779*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e1 0", flags, 0.0,
3780*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3781*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3782*a6021da3SAndroid Build Coastguard Worker 
3783*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0, StrToD("1.0e1 ", flags, 0.0,
3784*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3785*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3786*a6021da3SAndroid Build Coastguard Worker 
3787*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e 1", flags, 0.0,
3788*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3789*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3790*a6021da3SAndroid Build Coastguard Worker 
3791*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0 e1", flags, 0.0,
3792*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3793*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3794*a6021da3SAndroid Build Coastguard Worker 
3795*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("+ 1.0e1", flags, 0.0,
3796*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3797*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3798*a6021da3SAndroid Build Coastguard Worker 
3799*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("- 1.0e1", flags, 0.0,
3800*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3801*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3802*a6021da3SAndroid Build Coastguard Worker 
3803*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e+ 1", flags, 0.0,
3804*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3805*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3806*a6021da3SAndroid Build Coastguard Worker 
3807*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e- 1", flags, 0.0,
3808*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3809*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3810*a6021da3SAndroid Build Coastguard Worker 
3811*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e +1", flags, 0.0,
3812*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3813*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3814*a6021da3SAndroid Build Coastguard Worker 
3815*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("1.0e -1", flags, 0.0,
3816*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3817*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3818*a6021da3SAndroid Build Coastguard Worker 
3819*a6021da3SAndroid Build Coastguard Worker   separator = ' ';
3820*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX |
3821*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX_FLOATS |
3822*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
3823*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES;
3824*a6021da3SAndroid Build Coastguard Worker 
3825*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD("0x1 2", flags, 0.0, &processed, &all_used, separator));
3826*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3827*a6021da3SAndroid Build Coastguard Worker 
3828*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("0x0 0", flags, 1.0, &processed, &all_used, separator));
3829*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3830*a6021da3SAndroid Build Coastguard Worker 
3831*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
3832*a6021da3SAndroid Build Coastguard Worker            StrToD("0x1 2 3 4 5 6 7 8 9", flags, Double::NaN(),
3833*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used, separator));
3834*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3835*a6021da3SAndroid Build Coastguard Worker 
3836*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD(" 0x1 2 ", flags, 0.0,
3837*a6021da3SAndroid Build Coastguard Worker                         &processed, &all_used, separator));
3838*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3839*a6021da3SAndroid Build Coastguard Worker 
3840*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" 0x0 ", flags, 1.0,
3841*a6021da3SAndroid Build Coastguard Worker                        &processed, &all_used, separator));
3842*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3843*a6021da3SAndroid Build Coastguard Worker 
3844*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
3845*a6021da3SAndroid Build Coastguard Worker            StrToD(" 0x1 2 3 4 5 6 7 8 9 ", flags, Double::NaN(),
3846*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used, separator));
3847*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3848*a6021da3SAndroid Build Coastguard Worker 
3849*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
3850*a6021da3SAndroid Build Coastguard Worker            StrToD("0xa b c d e f", flags, 0.0,
3851*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used, separator));
3852*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3853*a6021da3SAndroid Build Coastguard Worker 
3854*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x 1 2", flags, 0.0,
3855*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3856*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3857*a6021da3SAndroid Build Coastguard Worker 
3858*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0 x0", flags, 1.0,
3859*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3860*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3861*a6021da3SAndroid Build Coastguard Worker 
3862*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3863*a6021da3SAndroid Build Coastguard Worker            StrToD("0x1 2  3 4 5 6 7 8 9", flags, Double::NaN(),
3864*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used, separator));
3865*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3866*a6021da3SAndroid Build Coastguard Worker 
3867*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 0 x1 2 ", flags, 0.0,
3868*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used, separator));
3869*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3870*a6021da3SAndroid Build Coastguard Worker 
3871*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3872*a6021da3SAndroid Build Coastguard Worker            StrToD("0x0 3p0", flags, 0.0, &processed, &all_used, separator));
3873*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3874*a6021da3SAndroid Build Coastguard Worker 
3875*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0,
3876*a6021da3SAndroid Build Coastguard Worker            StrToD("0x.0 0p0", flags, 0.0, &processed, &all_used, separator));
3877*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3878*a6021da3SAndroid Build Coastguard Worker 
3879*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3880*a6021da3SAndroid Build Coastguard Worker            StrToD("0x3.0 0p0", flags, 0.0, &processed, &all_used, separator));
3881*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3882*a6021da3SAndroid Build Coastguard Worker 
3883*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3884*a6021da3SAndroid Build Coastguard Worker            StrToD("0x0 3.p0", flags, 0.0, &processed, &all_used, separator));
3885*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3886*a6021da3SAndroid Build Coastguard Worker 
3887*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3888*a6021da3SAndroid Build Coastguard Worker            StrToD("0x 3p0", flags, 0.0, &processed, &all_used));
3889*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3890*a6021da3SAndroid Build Coastguard Worker 
3891*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3892*a6021da3SAndroid Build Coastguard Worker            StrToD("0x.0 p0", flags, 0.0, &processed, &all_used));
3893*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3894*a6021da3SAndroid Build Coastguard Worker 
3895*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3896*a6021da3SAndroid Build Coastguard Worker            StrToD("0x3.0p0 0", flags, 0.0, &processed, &all_used));
3897*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3898*a6021da3SAndroid Build Coastguard Worker 
3899*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3900*a6021da3SAndroid Build Coastguard Worker            StrToD("0x0 3.p 0", flags, 0.0, &processed, &all_used));
3901*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3902*a6021da3SAndroid Build Coastguard Worker 
3903*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3904*a6021da3SAndroid Build Coastguard Worker            StrToD("0x3p+ 0", flags, 0.0, &processed, &all_used));
3905*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3906*a6021da3SAndroid Build Coastguard Worker 
3907*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3908*a6021da3SAndroid Build Coastguard Worker            StrToD("0x.0p- 0", flags, 0.0, &processed, &all_used));
3909*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3910*a6021da3SAndroid Build Coastguard Worker 
3911*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3912*a6021da3SAndroid Build Coastguard Worker            StrToD("0x3.0p +0", flags, 0.0, &processed, &all_used));
3913*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3914*a6021da3SAndroid Build Coastguard Worker 
3915*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3916*a6021da3SAndroid Build Coastguard Worker            StrToD("0x0 3.p -0", flags, 0.0, &processed, &all_used));
3917*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3918*a6021da3SAndroid Build Coastguard Worker 
3919*a6021da3SAndroid Build Coastguard Worker   separator = 0x202F;
3920*a6021da3SAndroid Build Coastguard Worker   char char_separator = '@';
3921*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX |
3922*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX_FLOATS |
3923*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
3924*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES;
3925*a6021da3SAndroid Build Coastguard Worker 
3926*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0,
3927*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x1@2", flags, 0.0, &processed, &all_used,
3928*a6021da3SAndroid Build Coastguard Worker                     char_separator, separator));
3929*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3930*a6021da3SAndroid Build Coastguard Worker 
3931*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD16("0x0@0", flags, 1.0, &processed, &all_used,
3932*a6021da3SAndroid Build Coastguard Worker                          char_separator, separator));
3933*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3934*a6021da3SAndroid Build Coastguard Worker 
3935*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0x123456789),
3936*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x1@2@3@4@5@6@7@8@9", flags, Double::NaN(),
3937*a6021da3SAndroid Build Coastguard Worker                     &processed, &all_used, char_separator, separator));
3938*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3939*a6021da3SAndroid Build Coastguard Worker 
3940*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0, StrToD16(" 0x1@2 ", flags, 0.0,
3941*a6021da3SAndroid Build Coastguard Worker                           &processed, &all_used, char_separator, separator));
3942*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3943*a6021da3SAndroid Build Coastguard Worker 
3944*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<double>(0xabcdef),
3945*a6021da3SAndroid Build Coastguard Worker            StrToD16("0xa@b@c@d@e@f", flags, 0.0,
3946*a6021da3SAndroid Build Coastguard Worker                     &processed, &all_used, char_separator, separator));
3947*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3948*a6021da3SAndroid Build Coastguard Worker 
3949*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3950*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x@1@2", flags, 0.0,
3951*a6021da3SAndroid Build Coastguard Worker                     &processed, &all_used, char_separator, separator));
3952*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3953*a6021da3SAndroid Build Coastguard Worker 
3954*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3955*a6021da3SAndroid Build Coastguard Worker            StrToD16("0@x0", flags, 1.0,
3956*a6021da3SAndroid Build Coastguard Worker                     &processed, &all_used, char_separator, separator));
3957*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3958*a6021da3SAndroid Build Coastguard Worker 
3959*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
3960*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x1@2@@3@4@5@6@7@8@9", flags, Double::NaN(),
3961*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used, char_separator, separator));
3962*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
3963*a6021da3SAndroid Build Coastguard Worker 
3964*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3965*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x0@3p0", flags, 0.0, &processed, &all_used,
3966*a6021da3SAndroid Build Coastguard Worker                     char_separator, separator));
3967*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3968*a6021da3SAndroid Build Coastguard Worker 
3969*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0,
3970*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x.0@0p0", flags, 0.0, &processed, &all_used,
3971*a6021da3SAndroid Build Coastguard Worker                     char_separator, separator));
3972*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3973*a6021da3SAndroid Build Coastguard Worker 
3974*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3975*a6021da3SAndroid Build Coastguard Worker            StrToD16("0x3.0@0p0", flags, 0.0, &processed, &all_used,
3976*a6021da3SAndroid Build Coastguard Worker                     char_separator, separator));
3977*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3978*a6021da3SAndroid Build Coastguard Worker 
3979*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0,
3980*a6021da3SAndroid Build Coastguard Worker            StrToD16("[email protected]", flags, 0.0, &processed, &all_used,
3981*a6021da3SAndroid Build Coastguard Worker                     char_separator, separator));
3982*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
3983*a6021da3SAndroid Build Coastguard Worker }
3984*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleSpecialValues)3985*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleSpecialValues) {
3986*a6021da3SAndroid Build Coastguard Worker   int processed;
3987*a6021da3SAndroid Build Coastguard Worker   int flags = StringToDoubleConverter::NO_FLAGS;
3988*a6021da3SAndroid Build Coastguard Worker 
3989*a6021da3SAndroid Build Coastguard Worker   {
3990*a6021da3SAndroid Build Coastguard Worker     // Use 1.0 as junk_string_value.
3991*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter converter(flags, 0.0, 1.0, "infinity", "NaN");
3992*a6021da3SAndroid Build Coastguard Worker 
3993*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(Double::NaN(), converter.StringToDouble("+NaN", 4, &processed));
3994*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(4, processed);
3995*a6021da3SAndroid Build Coastguard Worker 
3996*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(-Double::Infinity(),
3997*a6021da3SAndroid Build Coastguard Worker              converter.StringToDouble("-infinity", 9, &processed));
3998*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(9, processed);
3999*a6021da3SAndroid Build Coastguard Worker 
4000*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0, converter.StringToDouble("Infinity", 8, &processed));
4001*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
4002*a6021da3SAndroid Build Coastguard Worker 
4003*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0, converter.StringToDouble("++NaN", 5, &processed));
4004*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
4005*a6021da3SAndroid Build Coastguard Worker   }
4006*a6021da3SAndroid Build Coastguard Worker 
4007*a6021da3SAndroid Build Coastguard Worker   {
4008*a6021da3SAndroid Build Coastguard Worker     // Use 1.0 as junk_string_value.
4009*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter converter(flags, 0.0, 1.0, "+infinity", "1NaN");
4010*a6021da3SAndroid Build Coastguard Worker 
4011*a6021da3SAndroid Build Coastguard Worker     // The '+' is consumed before trying to match the infinity string.
4012*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0, converter.StringToDouble("+infinity", 9, &processed));
4013*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
4014*a6021da3SAndroid Build Coastguard Worker 
4015*a6021da3SAndroid Build Coastguard Worker     // The match for "1NaN" triggers, and doesn't let the 1234.0 complete.
4016*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0, converter.StringToDouble("1234.0", 6, &processed));
4017*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
4018*a6021da3SAndroid Build Coastguard Worker   }
4019*a6021da3SAndroid Build Coastguard Worker }
4020*a6021da3SAndroid Build Coastguard Worker 
4021*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleCommentExamples)4022*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleCommentExamples) {
4023*a6021da3SAndroid Build Coastguard Worker   // Make sure the examples in the comments are correct.
4024*a6021da3SAndroid Build Coastguard Worker   int flags;
4025*a6021da3SAndroid Build Coastguard Worker   int processed;
4026*a6021da3SAndroid Build Coastguard Worker   bool all_used;
4027*a6021da3SAndroid Build Coastguard Worker 
4028*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX;
4029*a6021da3SAndroid Build Coastguard Worker 
4030*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4660.0, StrToD("0x1234", flags, 0.0, &processed, &all_used));
4031*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4032*a6021da3SAndroid Build Coastguard Worker 
4033*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4034*a6021da3SAndroid Build Coastguard Worker            StrToD("0x1234.56", flags, 0.0, &processed, &all_used));
4035*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4036*a6021da3SAndroid Build Coastguard Worker 
4037*a6021da3SAndroid Build Coastguard Worker   flags |= StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4038*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4660.0,
4039*a6021da3SAndroid Build Coastguard Worker            StrToD("0x1234.56", flags, 0.0, &processed, &all_used));
4040*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(6, processed);
4041*a6021da3SAndroid Build Coastguard Worker 
4042*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS;
4043*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(668.0, StrToD("01234", flags, 0.0, &processed, &all_used));
4044*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4045*a6021da3SAndroid Build Coastguard Worker 
4046*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(12349.0, StrToD("012349", flags, 0.0, &processed, &all_used));
4047*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4048*a6021da3SAndroid Build Coastguard Worker 
4049*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4050*a6021da3SAndroid Build Coastguard Worker            StrToD("01234.56", flags, 0.0, &processed, &all_used));
4051*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 0);
4052*a6021da3SAndroid Build Coastguard Worker 
4053*a6021da3SAndroid Build Coastguard Worker   flags |= StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4054*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(668.0,
4055*a6021da3SAndroid Build Coastguard Worker            StrToD("01234.56", flags, 0.0, &processed, &all_used));
4056*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 5);
4057*a6021da3SAndroid Build Coastguard Worker 
4058*a6021da3SAndroid Build Coastguard Worker   flags  = StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
4059*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-123.2, StrToD("-   123.2", flags, 0.0, &processed, &all_used));
4060*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4061*a6021da3SAndroid Build Coastguard Worker 
4062*a6021da3SAndroid Build Coastguard Worker   flags  = StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
4063*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.2, StrToD("+   123.2", flags, 0.0, &processed, &all_used));
4064*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4065*a6021da3SAndroid Build Coastguard Worker 
4066*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX |
4067*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4068*a6021da3SAndroid Build Coastguard Worker 
4069*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4660.0, StrToD("0x1234", flags, 0.0, &processed, &all_used));
4070*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4071*a6021da3SAndroid Build Coastguard Worker 
4072*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4660.0, StrToD("0x1234K", flags, 0.0, &processed, &all_used));
4073*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 6);
4074*a6021da3SAndroid Build Coastguard Worker 
4075*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
4076*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4077*a6021da3SAndroid Build Coastguard Worker 
4078*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" ", flags, 0.0, &processed, &all_used));
4079*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 0);
4080*a6021da3SAndroid Build Coastguard Worker 
4081*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD(" 1", flags, 0.0, &processed, &all_used));
4082*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 0);
4083*a6021da3SAndroid Build Coastguard Worker 
4084*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0, &processed, &all_used));
4085*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 0);
4086*a6021da3SAndroid Build Coastguard Worker 
4087*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-123.45, StrToD("-123.45", flags, 0.0, &processed, &all_used));
4088*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4089*a6021da3SAndroid Build Coastguard Worker 
4090*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4091*a6021da3SAndroid Build Coastguard Worker            StrToD("--123.45", flags, 0.0, &processed, &all_used));
4092*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 0);
4093*a6021da3SAndroid Build Coastguard Worker 
4094*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123e45, StrToD("123e45", flags, 0.0, &processed, &all_used));
4095*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4096*a6021da3SAndroid Build Coastguard Worker 
4097*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123e45, StrToD("123E45", flags, 0.0, &processed, &all_used));
4098*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4099*a6021da3SAndroid Build Coastguard Worker 
4100*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123e45, StrToD("123e+45", flags, 0.0, &processed, &all_used));
4101*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4102*a6021da3SAndroid Build Coastguard Worker 
4103*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123e-45, StrToD("123e-45", flags, 0.0, &processed, &all_used));
4104*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4105*a6021da3SAndroid Build Coastguard Worker 
4106*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.0, StrToD("123e", flags, 0.0, &processed, &all_used));
4107*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 3);
4108*a6021da3SAndroid Build Coastguard Worker 
4109*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123.0, StrToD("123e-", flags, 0.0, &processed, &all_used));
4110*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(processed, 3);
4111*a6021da3SAndroid Build Coastguard Worker 
4112*a6021da3SAndroid Build Coastguard Worker   {
4113*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter converter(flags, 0.0, 1.0, "infinity", "NaN");
4114*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(Double::NaN(), converter.StringToDouble("+NaN", 4, &processed));
4115*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(4, processed);
4116*a6021da3SAndroid Build Coastguard Worker 
4117*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(-Double::Infinity(),
4118*a6021da3SAndroid Build Coastguard Worker              converter.StringToDouble("-infinity", 9, &processed));
4119*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(9, processed);
4120*a6021da3SAndroid Build Coastguard Worker 
4121*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0, converter.StringToDouble("Infinity", 9, &processed));
4122*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
4123*a6021da3SAndroid Build Coastguard Worker   }
4124*a6021da3SAndroid Build Coastguard Worker 
4125*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
4126*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES;
4127*a6021da3SAndroid Build Coastguard Worker 
4128*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x1234", flags, 0.0, &processed, &all_used));
4129*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4130*a6021da3SAndroid Build Coastguard Worker 
4131*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(668.0, StrToD("01234", flags, 0.0, &processed, &all_used));
4132*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4133*a6021da3SAndroid Build Coastguard Worker 
4134*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD("", flags, 0.0, &processed, &all_used));
4135*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4136*a6021da3SAndroid Build Coastguard Worker 
4137*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0, StrToD(" ", flags, 0.0, &processed, &all_used));
4138*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4139*a6021da3SAndroid Build Coastguard Worker 
4140*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, StrToD(" 1", flags, 0.0, &processed, &all_used));
4141*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4142*a6021da3SAndroid Build Coastguard Worker 
4143*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0x", flags, 0.0, &processed, &all_used));
4144*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4145*a6021da3SAndroid Build Coastguard Worker 
4146*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("0123e45", flags, 0.0, &processed, &all_used));
4147*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4148*a6021da3SAndroid Build Coastguard Worker 
4149*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1239e45, StrToD("01239e45", flags, 0.0, &processed, &all_used));
4150*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4151*a6021da3SAndroid Build Coastguard Worker 
4152*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4153*a6021da3SAndroid Build Coastguard Worker            StrToD("-infinity", flags, 0.0, &processed, &all_used));
4154*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4155*a6021da3SAndroid Build Coastguard Worker 
4156*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToD("NaN", flags, 0.0, &processed, &all_used));
4157*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4158*a6021da3SAndroid Build Coastguard Worker 
4159*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
4160*a6021da3SAndroid Build Coastguard Worker   char separator = ' ';
4161*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1234.0,
4162*a6021da3SAndroid Build Coastguard Worker            StrToD("1 2 3 4", flags, 0.0, &processed, &all_used, separator));
4163*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4164*a6021da3SAndroid Build Coastguard Worker 
4165*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4166*a6021da3SAndroid Build Coastguard Worker            StrToD("1  2", flags, 0.0, &processed, &all_used, separator));
4167*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4168*a6021da3SAndroid Build Coastguard Worker 
4169*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1000000.0,
4170*a6021da3SAndroid Build Coastguard Worker            StrToD("1 000 000.0", flags, 0.0, &processed, &all_used, separator));
4171*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4172*a6021da3SAndroid Build Coastguard Worker 
4173*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0,
4174*a6021da3SAndroid Build Coastguard Worker            StrToD("1.000 000", flags, 0.0, &processed, &all_used, separator));
4175*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4176*a6021da3SAndroid Build Coastguard Worker 
4177*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(),
4178*a6021da3SAndroid Build Coastguard Worker            StrToD("1.0e1 000", flags, 0.0, &processed, &all_used, separator));
4179*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4180*a6021da3SAndroid Build Coastguard Worker }
4181*a6021da3SAndroid Build Coastguard Worker 
4182*a6021da3SAndroid Build Coastguard Worker 
StrToF16(const uc16 * str16,int length,int flags,double empty_string_value,int * processed_characters_count,bool * processed_all)4183*a6021da3SAndroid Build Coastguard Worker static float StrToF16(const uc16* str16, int length, int flags,
4184*a6021da3SAndroid Build Coastguard Worker                       double empty_string_value,
4185*a6021da3SAndroid Build Coastguard Worker                       int* processed_characters_count,
4186*a6021da3SAndroid Build Coastguard Worker                       bool* processed_all) {
4187*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, empty_string_value, Double::NaN(),
4188*a6021da3SAndroid Build Coastguard Worker                                     NULL, NULL);
4189*a6021da3SAndroid Build Coastguard Worker   float result =
4190*a6021da3SAndroid Build Coastguard Worker       converter.StringToFloat(str16, length, processed_characters_count);
4191*a6021da3SAndroid Build Coastguard Worker   *processed_all = (length == *processed_characters_count);
4192*a6021da3SAndroid Build Coastguard Worker   return result;
4193*a6021da3SAndroid Build Coastguard Worker }
4194*a6021da3SAndroid Build Coastguard Worker 
4195*a6021da3SAndroid Build Coastguard Worker 
StrToF(const char * str,int flags,double empty_string_value,int * processed_characters_count,bool * processed_all)4196*a6021da3SAndroid Build Coastguard Worker static float StrToF(const char* str, int flags, double empty_string_value,
4197*a6021da3SAndroid Build Coastguard Worker                     int* processed_characters_count, bool* processed_all) {
4198*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, empty_string_value, Single::NaN(),
4199*a6021da3SAndroid Build Coastguard Worker                                     NULL, NULL);
4200*a6021da3SAndroid Build Coastguard Worker   int len = static_cast<int>(strlen(str));
4201*a6021da3SAndroid Build Coastguard Worker   float result = converter.StringToFloat(str, len,
4202*a6021da3SAndroid Build Coastguard Worker                                          processed_characters_count);
4203*a6021da3SAndroid Build Coastguard Worker   *processed_all =
4204*a6021da3SAndroid Build Coastguard Worker       ((strlen(str) == static_cast<unsigned>(*processed_characters_count)));
4205*a6021da3SAndroid Build Coastguard Worker 
4206*a6021da3SAndroid Build Coastguard Worker   uc16 buffer16[256];
4207*a6021da3SAndroid Build Coastguard Worker   DOUBLE_CONVERSION_ASSERT(strlen(str) < DOUBLE_CONVERSION_ARRAY_SIZE(buffer16));
4208*a6021da3SAndroid Build Coastguard Worker   for (int i = 0; i < len; i++) {
4209*a6021da3SAndroid Build Coastguard Worker     buffer16[i] = str[i];
4210*a6021da3SAndroid Build Coastguard Worker   }
4211*a6021da3SAndroid Build Coastguard Worker   int processed_characters_count16;
4212*a6021da3SAndroid Build Coastguard Worker   bool processed_all16;
4213*a6021da3SAndroid Build Coastguard Worker   float result16 = StrToF16(buffer16, len, flags, empty_string_value,
4214*a6021da3SAndroid Build Coastguard Worker                             &processed_characters_count16,
4215*a6021da3SAndroid Build Coastguard Worker                             &processed_all16);
4216*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(result, result16);
4217*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(*processed_characters_count, processed_characters_count16);
4218*a6021da3SAndroid Build Coastguard Worker   return result;
4219*a6021da3SAndroid Build Coastguard Worker }
4220*a6021da3SAndroid Build Coastguard Worker 
4221*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToFloatVarious)4222*a6021da3SAndroid Build Coastguard Worker TEST(StringToFloatVarious) {
4223*a6021da3SAndroid Build Coastguard Worker   int flags;
4224*a6021da3SAndroid Build Coastguard Worker   int processed;
4225*a6021da3SAndroid Build Coastguard Worker   bool all_used;
4226*a6021da3SAndroid Build Coastguard Worker 
4227*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
4228*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
4229*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES;
4230*a6021da3SAndroid Build Coastguard Worker 
4231*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4232*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4233*a6021da3SAndroid Build Coastguard Worker 
4234*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4235*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4236*a6021da3SAndroid Build Coastguard Worker 
4237*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("  ", flags, 0.0f, &processed, &all_used));
4238*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4239*a6021da3SAndroid Build Coastguard Worker 
4240*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("  ", flags, 1.0f, &processed, &all_used));
4241*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4242*a6021da3SAndroid Build Coastguard Worker 
4243*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42", flags, 0.0f, &processed, &all_used));
4244*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4245*a6021da3SAndroid Build Coastguard Worker 
4246*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" + 42 ", flags, 0.0f, &processed, &all_used));
4247*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4248*a6021da3SAndroid Build Coastguard Worker 
4249*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" - 42 ", flags, 0.0f, &processed, &all_used));
4250*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4251*a6021da3SAndroid Build Coastguard Worker 
4252*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("x", flags, 1.0f, &processed, &all_used));
4253*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4254*a6021da3SAndroid Build Coastguard Worker 
4255*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" x", flags, 1.0f, &processed, &all_used));
4256*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4257*a6021da3SAndroid Build Coastguard Worker 
4258*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("42x", flags, 0.0f, &processed, &all_used));
4259*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4260*a6021da3SAndroid Build Coastguard Worker 
4261*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("42 x", flags, 0.0f, &processed, &all_used));
4262*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4263*a6021da3SAndroid Build Coastguard Worker 
4264*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" + 42 x", flags, 0.0f, &processed, &all_used));
4265*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4266*a6021da3SAndroid Build Coastguard Worker 
4267*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" - 42 x", flags, 0.0f, &processed, &all_used));
4268*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4269*a6021da3SAndroid Build Coastguard Worker 
4270*a6021da3SAndroid Build Coastguard Worker 
4271*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
4272*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
4273*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
4274*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4275*a6021da3SAndroid Build Coastguard Worker 
4276*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4277*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4278*a6021da3SAndroid Build Coastguard Worker 
4279*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4280*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4281*a6021da3SAndroid Build Coastguard Worker 
4282*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("  ", flags, 0.0f, &processed, &all_used));
4283*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4284*a6021da3SAndroid Build Coastguard Worker 
4285*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("  ", flags, 1.0f, &processed, &all_used));
4286*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4287*a6021da3SAndroid Build Coastguard Worker 
4288*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42", flags, 0.0f, &processed, &all_used));
4289*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4290*a6021da3SAndroid Build Coastguard Worker 
4291*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" + 42 ", flags, 0.0f, &processed, &all_used));
4292*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4293*a6021da3SAndroid Build Coastguard Worker 
4294*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" - 42 ", flags, 0.0f, &processed, &all_used));
4295*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4296*a6021da3SAndroid Build Coastguard Worker 
4297*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("x", flags, 1.0f, &processed, &all_used));
4298*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4299*a6021da3SAndroid Build Coastguard Worker 
4300*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" x", flags, 1.0f, &processed, &all_used));
4301*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4302*a6021da3SAndroid Build Coastguard Worker 
4303*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42x", flags, 0.0f, &processed, &all_used));
4304*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
4305*a6021da3SAndroid Build Coastguard Worker 
4306*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42 x", flags, 0.0f, &processed, &all_used));
4307*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4308*a6021da3SAndroid Build Coastguard Worker 
4309*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" + 42 x", flags, 0.0f, &processed, &all_used));
4310*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(6, processed);
4311*a6021da3SAndroid Build Coastguard Worker 
4312*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" - 42 x", flags, 0.0f, &processed, &all_used));
4313*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(6, processed);
4314*a6021da3SAndroid Build Coastguard Worker 
4315*a6021da3SAndroid Build Coastguard Worker 
4316*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
4317*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
4318*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4319*a6021da3SAndroid Build Coastguard Worker 
4320*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4321*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4322*a6021da3SAndroid Build Coastguard Worker 
4323*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4324*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4325*a6021da3SAndroid Build Coastguard Worker 
4326*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("  ", flags, 0.0f, &processed, &all_used));
4327*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4328*a6021da3SAndroid Build Coastguard Worker 
4329*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("  ", flags, 1.0f, &processed, &all_used));
4330*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4331*a6021da3SAndroid Build Coastguard Worker 
4332*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42", flags, 0.0f, &processed, &all_used));
4333*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4334*a6021da3SAndroid Build Coastguard Worker 
4335*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" + 42 ", flags, 0.0f, &processed, &all_used));
4336*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
4337*a6021da3SAndroid Build Coastguard Worker 
4338*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" - 42 ", flags, 0.0f, &processed, &all_used));
4339*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
4340*a6021da3SAndroid Build Coastguard Worker 
4341*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("x", flags, 1.0f, &processed, &all_used));
4342*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4343*a6021da3SAndroid Build Coastguard Worker 
4344*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" x", flags, 1.0f, &processed, &all_used));
4345*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4346*a6021da3SAndroid Build Coastguard Worker 
4347*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42x", flags, 0.0f, &processed, &all_used));
4348*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
4349*a6021da3SAndroid Build Coastguard Worker 
4350*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42 x", flags, 0.0f, &processed, &all_used));
4351*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
4352*a6021da3SAndroid Build Coastguard Worker 
4353*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" + 42 x", flags, 0.0f, &processed, &all_used));
4354*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
4355*a6021da3SAndroid Build Coastguard Worker 
4356*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" - 42 x", flags, 0.0f, &processed, &all_used));
4357*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5, processed);
4358*a6021da3SAndroid Build Coastguard Worker 
4359*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
4360*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4361*a6021da3SAndroid Build Coastguard Worker 
4362*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" +42 ", flags, 0.0f, &processed, &all_used));
4363*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
4364*a6021da3SAndroid Build Coastguard Worker 
4365*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-42.0f, StrToF(" -42 ", flags, 0.0f, &processed, &all_used));
4366*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
4367*a6021da3SAndroid Build Coastguard Worker 
4368*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" + 42 ", flags, 0.0f, &processed, &all_used));
4369*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4370*a6021da3SAndroid Build Coastguard Worker 
4371*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" - 42 ", flags, 0.0f, &processed, &all_used));
4372*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4373*a6021da3SAndroid Build Coastguard Worker 
4374*a6021da3SAndroid Build Coastguard Worker 
4375*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
4376*a6021da3SAndroid Build Coastguard Worker 
4377*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4378*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4379*a6021da3SAndroid Build Coastguard Worker 
4380*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4381*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4382*a6021da3SAndroid Build Coastguard Worker 
4383*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("  ", flags, 0.0f, &processed, &all_used));
4384*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4385*a6021da3SAndroid Build Coastguard Worker 
4386*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("  ", flags, 1.0f, &processed, &all_used));
4387*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4388*a6021da3SAndroid Build Coastguard Worker 
4389*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42", flags, 0.0f, &processed, &all_used));
4390*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4391*a6021da3SAndroid Build Coastguard Worker 
4392*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" + 42 ", flags, 0.0f, &processed, &all_used));
4393*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4394*a6021da3SAndroid Build Coastguard Worker 
4395*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" - 42 ", flags, 0.0f, &processed, &all_used));
4396*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4397*a6021da3SAndroid Build Coastguard Worker 
4398*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("x", flags, 1.0f, &processed, &all_used));
4399*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4400*a6021da3SAndroid Build Coastguard Worker 
4401*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" x", flags, 1.0f, &processed, &all_used));
4402*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4403*a6021da3SAndroid Build Coastguard Worker 
4404*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("42x", flags, 0.0f, &processed, &all_used));
4405*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4406*a6021da3SAndroid Build Coastguard Worker 
4407*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("42 x", flags, 0.0f, &processed, &all_used));
4408*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4409*a6021da3SAndroid Build Coastguard Worker 
4410*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" + 42 x", flags, 0.0f, &processed, &all_used));
4411*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4412*a6021da3SAndroid Build Coastguard Worker 
4413*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" - 42 x", flags, 0.0f, &processed, &all_used));
4414*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4415*a6021da3SAndroid Build Coastguard Worker 
4416*a6021da3SAndroid Build Coastguard Worker 
4417*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES;
4418*a6021da3SAndroid Build Coastguard Worker 
4419*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" ", flags, 0.0f, &processed, &all_used));
4420*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4421*a6021da3SAndroid Build Coastguard Worker 
4422*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF(" ", flags, 1.0f, &processed, &all_used));
4423*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4424*a6021da3SAndroid Build Coastguard Worker 
4425*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF(" 42", flags, 0.0f, &processed, &all_used));
4426*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4427*a6021da3SAndroid Build Coastguard Worker 
4428*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF("42 ", flags, 0.0f, &processed, &all_used));
4429*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4430*a6021da3SAndroid Build Coastguard Worker 
4431*a6021da3SAndroid Build Coastguard Worker 
4432*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_SPACES;
4433*a6021da3SAndroid Build Coastguard Worker 
4434*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" ", flags, 0.0f, &processed, &all_used));
4435*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4436*a6021da3SAndroid Build Coastguard Worker 
4437*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF(" ", flags, 1.0f, &processed, &all_used));
4438*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4439*a6021da3SAndroid Build Coastguard Worker 
4440*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(42.0f, StrToF("42 ", flags, 0.0f, &processed, &all_used));
4441*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4442*a6021da3SAndroid Build Coastguard Worker 
4443*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), StrToF(" 42", flags, 0.0f, &processed, &all_used));
4444*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4445*a6021da3SAndroid Build Coastguard Worker }
4446*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToFloatEmptyString)4447*a6021da3SAndroid Build Coastguard Worker TEST(StringToFloatEmptyString) {
4448*a6021da3SAndroid Build Coastguard Worker   int flags;
4449*a6021da3SAndroid Build Coastguard Worker   int processed;
4450*a6021da3SAndroid Build Coastguard Worker   bool all_used;
4451*a6021da3SAndroid Build Coastguard Worker 
4452*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::NO_FLAGS;
4453*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4454*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4455*a6021da3SAndroid Build Coastguard Worker 
4456*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4457*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4458*a6021da3SAndroid Build Coastguard Worker 
4459*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("", flags, Single::NaN(),
4460*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4461*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4462*a6021da3SAndroid Build Coastguard Worker 
4463*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 0.0f, &processed, &all_used));
4464*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4465*a6021da3SAndroid Build Coastguard Worker 
4466*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 1.0f, &processed, &all_used));
4467*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4468*a6021da3SAndroid Build Coastguard Worker 
4469*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4470*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4471*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4472*a6021da3SAndroid Build Coastguard Worker 
4473*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
4474*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4475*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4476*a6021da3SAndroid Build Coastguard Worker 
4477*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4478*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4479*a6021da3SAndroid Build Coastguard Worker 
4480*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("", flags, Single::NaN(),
4481*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4482*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4483*a6021da3SAndroid Build Coastguard Worker 
4484*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 0.0f, &processed, &all_used));
4485*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4486*a6021da3SAndroid Build Coastguard Worker 
4487*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 1.0f, &processed, &all_used));
4488*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4489*a6021da3SAndroid Build Coastguard Worker 
4490*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4491*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4492*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4493*a6021da3SAndroid Build Coastguard Worker 
4494*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES;
4495*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4496*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4497*a6021da3SAndroid Build Coastguard Worker 
4498*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4499*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4500*a6021da3SAndroid Build Coastguard Worker 
4501*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("", flags, Single::NaN(),
4502*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4503*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4504*a6021da3SAndroid Build Coastguard Worker 
4505*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" ", flags, 0.0f, &processed, &all_used));
4506*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4507*a6021da3SAndroid Build Coastguard Worker 
4508*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF(" ", flags, 1.0f, &processed, &all_used));
4509*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4510*a6021da3SAndroid Build Coastguard Worker 
4511*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4512*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4513*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4514*a6021da3SAndroid Build Coastguard Worker 
4515*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_SPACES;
4516*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4517*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4518*a6021da3SAndroid Build Coastguard Worker 
4519*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4520*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4521*a6021da3SAndroid Build Coastguard Worker 
4522*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("", flags, Single::NaN(),
4523*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4524*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4525*a6021da3SAndroid Build Coastguard Worker 
4526*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" ", flags, 0.0f, &processed, &all_used));
4527*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4528*a6021da3SAndroid Build Coastguard Worker 
4529*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF(" ", flags, 1.0f, &processed, &all_used));
4530*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4531*a6021da3SAndroid Build Coastguard Worker 
4532*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4533*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4534*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4535*a6021da3SAndroid Build Coastguard Worker 
4536*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK;
4537*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("", flags, 0.0f, &processed, &all_used));
4538*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4539*a6021da3SAndroid Build Coastguard Worker 
4540*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0f, StrToF("", flags, 1.0f, &processed, &all_used));
4541*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4542*a6021da3SAndroid Build Coastguard Worker 
4543*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("", flags, Single::NaN(),
4544*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4545*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4546*a6021da3SAndroid Build Coastguard Worker 
4547*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 0.0f, &processed, &all_used));
4548*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4549*a6021da3SAndroid Build Coastguard Worker 
4550*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 1.0f, &processed, &all_used));
4551*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4552*a6021da3SAndroid Build Coastguard Worker 
4553*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4554*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4555*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4556*a6021da3SAndroid Build Coastguard Worker 
4557*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x", flags, 0.0f, &processed, &all_used));
4558*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4559*a6021da3SAndroid Build Coastguard Worker 
4560*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" x", flags, 0.0f, &processed, &all_used));
4561*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4562*a6021da3SAndroid Build Coastguard Worker }
4563*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToFloatHexString)4564*a6021da3SAndroid Build Coastguard Worker TEST(StringToFloatHexString) {
4565*a6021da3SAndroid Build Coastguard Worker   int flags;
4566*a6021da3SAndroid Build Coastguard Worker   int processed;
4567*a6021da3SAndroid Build Coastguard Worker   bool all_used;
4568*a6021da3SAndroid Build Coastguard Worker   double d;
4569*a6021da3SAndroid Build Coastguard Worker   float f;
4570*a6021da3SAndroid Build Coastguard Worker 
4571*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX |
4572*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
4573*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
4574*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
4575*a6021da3SAndroid Build Coastguard Worker 
4576*a6021da3SAndroid Build Coastguard Worker   // Check that no double rounding occurs:
4577*a6021da3SAndroid Build Coastguard Worker   const char* double_rounding_example1 = "0x100000100000008";
4578*a6021da3SAndroid Build Coastguard Worker   d = StrToD(double_rounding_example1, flags, 0.0, &processed, &all_used);
4579*a6021da3SAndroid Build Coastguard Worker   f = StrToF(double_rounding_example1, flags, 0.0f, &processed, &all_used);
4580*a6021da3SAndroid Build Coastguard Worker   CHECK(f != static_cast<float>(d));
4581*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057602627862528.0f, StrToF(double_rounding_example1,
4582*a6021da3SAndroid Build Coastguard Worker                                         flags, 0.0f, &processed, &all_used));
4583*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4584*a6021da3SAndroid Build Coastguard Worker 
4585*a6021da3SAndroid Build Coastguard Worker   const char* double_rounding_example2 = "0x1000002FFFFFFF8";
4586*a6021da3SAndroid Build Coastguard Worker   d = StrToD(double_rounding_example2, flags, 0.0, &processed, &all_used);
4587*a6021da3SAndroid Build Coastguard Worker   f = StrToF(double_rounding_example2, flags, 0.0f, &processed, &all_used);
4588*a6021da3SAndroid Build Coastguard Worker   CHECK(f != static_cast<float>(d));
4589*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057602627862528.0f, StrToF(double_rounding_example2,
4590*a6021da3SAndroid Build Coastguard Worker                                         flags, 0.0f, &processed, &all_used));
4591*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4592*a6021da3SAndroid Build Coastguard Worker 
4593*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF("0x12", flags, 0.0f, &processed, &all_used));
4594*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4595*a6021da3SAndroid Build Coastguard Worker 
4596*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x0", flags, 1.0f, &processed, &all_used));
4597*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4598*a6021da3SAndroid Build Coastguard Worker 
4599*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4600*a6021da3SAndroid Build Coastguard Worker            StrToF("0x123456789", flags, Single::NaN(), &processed, &all_used));
4601*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4602*a6021da3SAndroid Build Coastguard Worker 
4603*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF(" 0x12 ", flags, 0.0f, &processed, &all_used));
4604*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4605*a6021da3SAndroid Build Coastguard Worker 
4606*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" 0x0 ", flags, 1.0f, &processed, &all_used));
4607*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4608*a6021da3SAndroid Build Coastguard Worker 
4609*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4610*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x123456789 ", flags, Single::NaN(),
4611*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
4612*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4613*a6021da3SAndroid Build Coastguard Worker 
4614*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4615*a6021da3SAndroid Build Coastguard Worker            StrToF("0xabcdef", flags, 0.0f, &processed, &all_used));
4616*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4617*a6021da3SAndroid Build Coastguard Worker 
4618*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4619*a6021da3SAndroid Build Coastguard Worker            StrToF("0xABCDEF", flags, 0.0f, &processed, &all_used));
4620*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4621*a6021da3SAndroid Build Coastguard Worker 
4622*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4623*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabcdef ", flags, 0.0f, &processed, &all_used));
4624*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4625*a6021da3SAndroid Build Coastguard Worker 
4626*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4627*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABCDEF ", flags, 0.0f, &processed, &all_used));
4628*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4629*a6021da3SAndroid Build Coastguard Worker 
4630*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
4631*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4632*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4633*a6021da3SAndroid Build Coastguard Worker 
4634*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x", flags, 0.0f,
4635*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4636*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4637*a6021da3SAndroid Build Coastguard Worker 
4638*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x ", flags, 0.0f,
4639*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4640*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4641*a6021da3SAndroid Build Coastguard Worker 
4642*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x 3", flags, 0.0f,
4643*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4644*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4645*a6021da3SAndroid Build Coastguard Worker 
4646*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3g", flags, 0.0f,
4647*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4648*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4649*a6021da3SAndroid Build Coastguard Worker 
4650*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.23", flags, 0.0f,
4651*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4652*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4653*a6021da3SAndroid Build Coastguard Worker 
4654*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x3", flags, 0.0f,
4655*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4656*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4657*a6021da3SAndroid Build Coastguard Worker 
4658*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3 foo", flags, 0.0f,
4659*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4660*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4661*a6021da3SAndroid Build Coastguard Worker 
4662*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x3 foo", flags, 0.0f,
4663*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4664*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4665*a6021da3SAndroid Build Coastguard Worker 
4666*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ 0x3 foo", flags, 0.0f,
4667*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4668*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4669*a6021da3SAndroid Build Coastguard Worker 
4670*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+", flags, 0.0f, &processed, &all_used));
4671*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4672*a6021da3SAndroid Build Coastguard Worker 
4673*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("-", flags, 0.0f, &processed, &all_used));
4674*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4675*a6021da3SAndroid Build Coastguard Worker 
4676*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0f, StrToF("-0x5", flags, 0.0f, &processed, &all_used));
4677*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4678*a6021da3SAndroid Build Coastguard Worker 
4679*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0f, StrToF(" - 0x5 ", flags, 0.0f, &processed, &all_used));
4680*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4681*a6021da3SAndroid Build Coastguard Worker 
4682*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(5.0f, StrToF(" + 0x5 ", flags, 0.0f, &processed, &all_used));
4683*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4684*a6021da3SAndroid Build Coastguard Worker 
4685*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- -0x5", flags, 0.0f,
4686*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4687*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4688*a6021da3SAndroid Build Coastguard Worker 
4689*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- +0x5", flags, 0.0f,
4690*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4691*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4692*a6021da3SAndroid Build Coastguard Worker 
4693*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ +0x5", flags, 0.0f,
4694*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4695*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4696*a6021da3SAndroid Build Coastguard Worker 
4697*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3p0", flags, 0.0f, &processed, &all_used));
4698*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4699*a6021da3SAndroid Build Coastguard Worker 
4700*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x.0p0", flags, 0.0f, &processed, &all_used));
4701*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4702*a6021da3SAndroid Build Coastguard Worker 
4703*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.0p0", flags, 0.0f,
4704*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4705*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4706*a6021da3SAndroid Build Coastguard Worker 
4707*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.p0", flags, 0.0f,
4708*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4709*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4710*a6021da3SAndroid Build Coastguard Worker 
4711*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX;
4712*a6021da3SAndroid Build Coastguard Worker 
4713*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF("0x12", flags, 0.0f, &processed, &all_used));
4714*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4715*a6021da3SAndroid Build Coastguard Worker 
4716*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x0", flags, 1.0f, &processed, &all_used));
4717*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4718*a6021da3SAndroid Build Coastguard Worker 
4719*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4720*a6021da3SAndroid Build Coastguard Worker            StrToF("0x123456789", flags, Single::NaN(), &processed, &all_used));
4721*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4722*a6021da3SAndroid Build Coastguard Worker 
4723*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x12 ", flags, 0.0f, &processed, &all_used));
4724*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4725*a6021da3SAndroid Build Coastguard Worker 
4726*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x0 ", flags, 1.0f, &processed, &all_used));
4727*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4728*a6021da3SAndroid Build Coastguard Worker 
4729*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x123456789 ", flags, Single::NaN(),
4730*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4731*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4732*a6021da3SAndroid Build Coastguard Worker 
4733*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4734*a6021da3SAndroid Build Coastguard Worker            StrToF("0xabcdef", flags, 0.0f, &processed, &all_used));
4735*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4736*a6021da3SAndroid Build Coastguard Worker 
4737*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4738*a6021da3SAndroid Build Coastguard Worker            StrToF("0xABCDEF", flags, 0.0f, &processed, &all_used));
4739*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4740*a6021da3SAndroid Build Coastguard Worker 
4741*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4742*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabcdef ", flags, 0.0f, &processed, &all_used));
4743*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4744*a6021da3SAndroid Build Coastguard Worker 
4745*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4746*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABCDEF ", flags, 0.0f, &processed, &all_used));
4747*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4748*a6021da3SAndroid Build Coastguard Worker 
4749*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4750*a6021da3SAndroid Build Coastguard Worker            StrToF(" ", flags, 0.0f, &processed, &all_used));
4751*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4752*a6021da3SAndroid Build Coastguard Worker 
4753*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x", flags, 0.0f,
4754*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4755*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4756*a6021da3SAndroid Build Coastguard Worker 
4757*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x ", flags, 0.0f,
4758*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4759*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4760*a6021da3SAndroid Build Coastguard Worker 
4761*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x 3", flags, 0.0f,
4762*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4763*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4764*a6021da3SAndroid Build Coastguard Worker 
4765*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3g", flags, 0.0f,
4766*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4767*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4768*a6021da3SAndroid Build Coastguard Worker 
4769*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.23", flags, 0.0f,
4770*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4771*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4772*a6021da3SAndroid Build Coastguard Worker 
4773*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x3", flags, 0.0f,
4774*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4775*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4776*a6021da3SAndroid Build Coastguard Worker 
4777*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ 0x3 foo", flags, 0.0f,
4778*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4779*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4780*a6021da3SAndroid Build Coastguard Worker 
4781*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+", flags, 0.0f, &processed, &all_used));
4782*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4783*a6021da3SAndroid Build Coastguard Worker 
4784*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("-", flags, 0.0f, &processed, &all_used));
4785*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4786*a6021da3SAndroid Build Coastguard Worker 
4787*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0f, StrToF("-0x5", flags, 0.0f, &processed, &all_used));
4788*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4789*a6021da3SAndroid Build Coastguard Worker 
4790*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" - 0x5 ", flags, 0.0f, &processed, &all_used));
4791*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4792*a6021da3SAndroid Build Coastguard Worker 
4793*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" + 0x5 ", flags, 0.0f, &processed, &all_used));
4794*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4795*a6021da3SAndroid Build Coastguard Worker 
4796*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- -0x5", flags, 0.0f,  &processed, &all_used));
4797*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4798*a6021da3SAndroid Build Coastguard Worker 
4799*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- +0x5", flags, 0.0f,  &processed, &all_used));
4800*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4801*a6021da3SAndroid Build Coastguard Worker 
4802*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ +0x5", flags, 0.0f,  &processed, &all_used));
4803*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4804*a6021da3SAndroid Build Coastguard Worker 
4805*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3p0", flags, 0.0f, &processed, &all_used));
4806*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4807*a6021da3SAndroid Build Coastguard Worker 
4808*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x.0p0", flags, 0.0f, &processed, &all_used));
4809*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4810*a6021da3SAndroid Build Coastguard Worker 
4811*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.0p0", flags, 0.0f,
4812*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4813*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4814*a6021da3SAndroid Build Coastguard Worker 
4815*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3.p0", flags, 0.0f,
4816*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4817*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4818*a6021da3SAndroid Build Coastguard Worker 
4819*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK |
4820*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX;
4821*a6021da3SAndroid Build Coastguard Worker 
4822*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF("0x12", flags, 0.0f, &processed, &all_used));
4823*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4824*a6021da3SAndroid Build Coastguard Worker 
4825*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x0", flags, 1.0f, &processed, &all_used));
4826*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4827*a6021da3SAndroid Build Coastguard Worker 
4828*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4829*a6021da3SAndroid Build Coastguard Worker            StrToF("0x123456789", flags, Single::NaN(), &processed, &all_used));
4830*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4831*a6021da3SAndroid Build Coastguard Worker 
4832*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x12 ", flags, 0.0f, &processed, &all_used));
4833*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4834*a6021da3SAndroid Build Coastguard Worker 
4835*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x0 ", flags, 1.0f, &processed, &all_used));
4836*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4837*a6021da3SAndroid Build Coastguard Worker 
4838*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF("0x12 ", flags, 0.0f, &processed, &all_used));
4839*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
4840*a6021da3SAndroid Build Coastguard Worker 
4841*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x0 ", flags, 1.0f, &processed, &all_used));
4842*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4843*a6021da3SAndroid Build Coastguard Worker 
4844*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4845*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x123456789 ", flags, Single::NaN(),
4846*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
4847*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4848*a6021da3SAndroid Build Coastguard Worker 
4849*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4850*a6021da3SAndroid Build Coastguard Worker            StrToF("0xabcdef", flags, 0.0f, &processed, &all_used));
4851*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4852*a6021da3SAndroid Build Coastguard Worker 
4853*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4854*a6021da3SAndroid Build Coastguard Worker            StrToF("0xABCDEF", flags, 0.0f, &processed, &all_used));
4855*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4856*a6021da3SAndroid Build Coastguard Worker 
4857*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4858*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabcdef ", flags, 0.0f, &processed, &all_used));
4859*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4860*a6021da3SAndroid Build Coastguard Worker 
4861*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4862*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABCDEF ", flags, 0.0f, &processed, &all_used));
4863*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4864*a6021da3SAndroid Build Coastguard Worker 
4865*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4866*a6021da3SAndroid Build Coastguard Worker            StrToF("0xabcdef ", flags, 0.0f, &processed, &all_used));
4867*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
4868*a6021da3SAndroid Build Coastguard Worker 
4869*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4870*a6021da3SAndroid Build Coastguard Worker            StrToF("0xABCDEF ", flags, 0.0f, &processed, &all_used));
4871*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
4872*a6021da3SAndroid Build Coastguard Worker 
4873*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4874*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabcdef", flags, 0.0f, &processed, &all_used));
4875*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4876*a6021da3SAndroid Build Coastguard Worker 
4877*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4878*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABCDEF", flags, 0.0f, &processed, &all_used));
4879*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4880*a6021da3SAndroid Build Coastguard Worker 
4881*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, 0.0f, &processed, &all_used));
4882*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4883*a6021da3SAndroid Build Coastguard Worker 
4884*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x", flags, 0.0f,
4885*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4886*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4887*a6021da3SAndroid Build Coastguard Worker 
4888*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x ", flags, 0.0f,
4889*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4890*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4891*a6021da3SAndroid Build Coastguard Worker 
4892*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x 3", flags, 0.0f,
4893*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4894*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4895*a6021da3SAndroid Build Coastguard Worker 
4896*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3g", flags, 0.0f, &processed, &all_used));
4897*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4898*a6021da3SAndroid Build Coastguard Worker 
4899*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3.234", flags, 0.0f, &processed, &all_used));
4900*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4901*a6021da3SAndroid Build Coastguard Worker 
4902*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x3g", flags, 0.0f, &processed, &all_used));
4903*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4904*a6021da3SAndroid Build Coastguard Worker 
4905*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
4906*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x3.234", flags, 0.0f, &processed, &all_used));
4907*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4908*a6021da3SAndroid Build Coastguard Worker 
4909*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x3", flags, 0.0f,
4910*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4911*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4912*a6021da3SAndroid Build Coastguard Worker 
4913*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ 0x3 foo", flags, 0.0f,
4914*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
4915*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4916*a6021da3SAndroid Build Coastguard Worker 
4917*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+", flags, 0.0f, &processed, &all_used));
4918*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4919*a6021da3SAndroid Build Coastguard Worker 
4920*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("-", flags, 0.0f, &processed, &all_used));
4921*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4922*a6021da3SAndroid Build Coastguard Worker 
4923*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5.0f, StrToF("-0x5", flags, 0.0f, &processed, &all_used));
4924*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4925*a6021da3SAndroid Build Coastguard Worker 
4926*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" - 0x5 ", flags, 0.0f, &processed, &all_used));
4927*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4928*a6021da3SAndroid Build Coastguard Worker 
4929*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" + 0x5 ", flags, 0.0f, &processed, &all_used));
4930*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4931*a6021da3SAndroid Build Coastguard Worker 
4932*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- -0x5", flags, 0.0f,  &processed, &all_used));
4933*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4934*a6021da3SAndroid Build Coastguard Worker 
4935*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- +0x5", flags, 0.0f,  &processed, &all_used));
4936*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4937*a6021da3SAndroid Build Coastguard Worker 
4938*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ +0x5", flags, 0.0f,  &processed, &all_used));
4939*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4940*a6021da3SAndroid Build Coastguard Worker 
4941*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3p0", flags, 0.0f, &processed, &all_used));
4942*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4943*a6021da3SAndroid Build Coastguard Worker 
4944*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x.0p0", flags, 0.0f, &processed, &all_used));
4945*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
4946*a6021da3SAndroid Build Coastguard Worker 
4947*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3.0p0", flags, 0.0f, &processed, &all_used));
4948*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4949*a6021da3SAndroid Build Coastguard Worker 
4950*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3.p0", flags, 0.0f, &processed, &all_used));
4951*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
4952*a6021da3SAndroid Build Coastguard Worker 
4953*a6021da3SAndroid Build Coastguard Worker 
4954*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK |
4955*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
4956*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
4957*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
4958*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_HEX;
4959*a6021da3SAndroid Build Coastguard Worker 
4960*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF("0x12", flags, 0.0f, &processed, &all_used));
4961*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4962*a6021da3SAndroid Build Coastguard Worker 
4963*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x0", flags, 1.0f, &processed, &all_used));
4964*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4965*a6021da3SAndroid Build Coastguard Worker 
4966*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4967*a6021da3SAndroid Build Coastguard Worker            StrToF("0x123456789", flags, Single::NaN(), &processed, &all_used));
4968*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4969*a6021da3SAndroid Build Coastguard Worker 
4970*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(18.0f, StrToF(" 0x12 ", flags, 0.0f, &processed, &all_used));
4971*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4972*a6021da3SAndroid Build Coastguard Worker 
4973*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" 0x0 ", flags, 1.0f, &processed, &all_used));
4974*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4975*a6021da3SAndroid Build Coastguard Worker 
4976*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
4977*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x123456789 ", flags, Single::NaN(),
4978*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
4979*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4980*a6021da3SAndroid Build Coastguard Worker 
4981*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4982*a6021da3SAndroid Build Coastguard Worker            StrToF("0xabcdef", flags, 0.0f, &processed, &all_used));
4983*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4984*a6021da3SAndroid Build Coastguard Worker 
4985*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4986*a6021da3SAndroid Build Coastguard Worker            StrToF("0xABCDEF", flags, 0.0f, &processed, &all_used));
4987*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4988*a6021da3SAndroid Build Coastguard Worker 
4989*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4990*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabcdef ", flags, 0.0f, &processed, &all_used));
4991*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4992*a6021da3SAndroid Build Coastguard Worker 
4993*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabcdef),
4994*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABCDEF ", flags, 0.0f, &processed, &all_used));
4995*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
4996*a6021da3SAndroid Build Coastguard Worker 
4997*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabc),
4998*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xabc def ", flags, 0.0f, &processed, &all_used));
4999*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(7, processed);
5000*a6021da3SAndroid Build Coastguard Worker 
5001*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0xabc),
5002*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0xABC DEF ", flags, 0.0f, &processed, &all_used));
5003*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(7, processed);
5004*a6021da3SAndroid Build Coastguard Worker 
5005*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x12),
5006*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x12 ", flags, 0.0f, &processed, &all_used));
5007*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5008*a6021da3SAndroid Build Coastguard Worker 
5009*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" 0x0 ", flags, 1.0f, &processed, &all_used));
5010*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5011*a6021da3SAndroid Build Coastguard Worker 
5012*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(static_cast<float>(0x123456789),
5013*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0x123456789 ", flags, Single::NaN(),
5014*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5015*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5016*a6021da3SAndroid Build Coastguard Worker 
5017*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
5018*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5019*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5020*a6021da3SAndroid Build Coastguard Worker 
5021*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x", flags, 0.0f,
5022*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5023*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5024*a6021da3SAndroid Build Coastguard Worker 
5025*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x ", flags, 0.0f,
5026*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5027*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5028*a6021da3SAndroid Build Coastguard Worker 
5029*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x 3", flags, 0.0f,
5030*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5031*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5032*a6021da3SAndroid Build Coastguard Worker 
5033*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ((float)0x3, StrToF("0x3g", flags, 0.0f, &processed, &all_used));
5034*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5035*a6021da3SAndroid Build Coastguard Worker 
5036*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ((float)0x3, StrToF("0x3.234", flags, 0.0f, &processed, &all_used));
5037*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5038*a6021da3SAndroid Build Coastguard Worker 
5039*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x3", flags, 0.0f,
5040*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5041*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5042*a6021da3SAndroid Build Coastguard Worker 
5043*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_HEX_FLOATS;
5044*a6021da3SAndroid Build Coastguard Worker 
5045*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3p0", flags, 0.0, &processed, &all_used));
5046*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5047*a6021da3SAndroid Build Coastguard Worker 
5048*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x.0p0", flags, 0.0, &processed, &all_used));
5049*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5050*a6021da3SAndroid Build Coastguard Worker 
5051*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3.0p0", flags, 0.0, &processed, &all_used));
5052*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5053*a6021da3SAndroid Build Coastguard Worker 
5054*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3.0f, StrToF("0x3.p0", flags, 0.0, &processed, &all_used));
5055*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5056*a6021da3SAndroid Build Coastguard Worker 
5057*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-5634002804104940178441764864.0f, StrToF("-0x123456789012345678901234p0",
5058*a6021da3SAndroid Build Coastguard Worker                                              flags, 0.0,
5059*a6021da3SAndroid Build Coastguard Worker                                              &processed, &all_used));
5060*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5061*a6021da3SAndroid Build Coastguard Worker 
5062*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(134217728.0f, StrToF("0x8000001p0", flags, 0.0,
5063*a6021da3SAndroid Build Coastguard Worker                                         &processed, &all_used));
5064*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5065*a6021da3SAndroid Build Coastguard Worker 
5066*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(134217728.0f, StrToF("0x8000000p0", flags, 0.0,
5067*a6021da3SAndroid Build Coastguard Worker                                         &processed, &all_used));
5068*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5069*a6021da3SAndroid Build Coastguard Worker 
5070*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755813888.0f, StrToF("0x8000000001p0", flags, 0.0,
5071*a6021da3SAndroid Build Coastguard Worker                                      &processed, &all_used));
5072*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5073*a6021da3SAndroid Build Coastguard Worker 
5074*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755813888.0f, StrToF("0x8000000000p0", flags, 0.0,
5075*a6021da3SAndroid Build Coastguard Worker                                      &processed, &all_used));
5076*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5077*a6021da3SAndroid Build Coastguard Worker 
5078*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755879424.0f, StrToF("0x8000008001p0", flags, 0.0,
5079*a6021da3SAndroid Build Coastguard Worker                                             &processed, &all_used));
5080*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5081*a6021da3SAndroid Build Coastguard Worker 
5082*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755813888.0f, StrToF("0x8000008000p0", flags, 0.0,
5083*a6021da3SAndroid Build Coastguard Worker                                             &processed, &all_used));
5084*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5085*a6021da3SAndroid Build Coastguard Worker 
5086*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755944960.0f, StrToF("0x8000018001p0", flags, 0.0,
5087*a6021da3SAndroid Build Coastguard Worker                                             &processed, &all_used));
5088*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5089*a6021da3SAndroid Build Coastguard Worker 
5090*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(549755944960.0f, StrToF("0x8000018000p0", flags, 0.0,
5091*a6021da3SAndroid Build Coastguard Worker                                             &processed, &all_used));
5092*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5093*a6021da3SAndroid Build Coastguard Worker 
5094*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8796093022208.0f, StrToF("0x8000000001p4", flags, 0.0,
5095*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
5096*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5097*a6021da3SAndroid Build Coastguard Worker 
5098*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8796093022208.0f, StrToF("0x8000000000p+4", flags, 0.0,
5099*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
5100*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5101*a6021da3SAndroid Build Coastguard Worker 
5102*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8796094070784.0f, StrToF("0x8000008001p04", flags, 0.0,
5103*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
5104*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5105*a6021da3SAndroid Build Coastguard Worker 
5106*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(34359738368.0f, StrToF("0x8000008000p-4", flags, 0.0,
5107*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
5108*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5109*a6021da3SAndroid Build Coastguard Worker 
5110*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(34359746560.0f, StrToF("0x8000018001p-04", flags, 0.0,
5111*a6021da3SAndroid Build Coastguard Worker                                            &processed, &all_used));
5112*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5113*a6021da3SAndroid Build Coastguard Worker 
5114*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8796095119360.0f, StrToF("0x8000018000p4", flags, 0.0,
5115*a6021da3SAndroid Build Coastguard Worker                                           &processed, &all_used));
5116*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5117*a6021da3SAndroid Build Coastguard Worker 
5118*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::Infinity(), StrToF("0x1p2000", flags, 0.0,
5119*a6021da3SAndroid Build Coastguard Worker                                       &processed, &all_used));
5120*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5121*a6021da3SAndroid Build Coastguard Worker 
5122*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x1p-2000", flags, 0.0, &processed, &all_used));
5123*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5124*a6021da3SAndroid Build Coastguard Worker 
5125*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-0.0f, StrToF("-0x1p-2000", flags, 0.0, &processed, &all_used));
5126*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5127*a6021da3SAndroid Build Coastguard Worker 
5128*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" ", flags, Single::NaN(),
5129*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5130*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5131*a6021da3SAndroid Build Coastguard Worker 
5132*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x", flags, 0.0,
5133*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5134*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5135*a6021da3SAndroid Build Coastguard Worker 
5136*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x ", flags, 0.0,
5137*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5138*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5139*a6021da3SAndroid Build Coastguard Worker 
5140*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x 3", flags, 0.0,
5141*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5142*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5143*a6021da3SAndroid Build Coastguard Worker 
5144*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3g", flags, 0.0,
5145*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5146*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5147*a6021da3SAndroid Build Coastguard Worker 
5148*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("x3", flags, 0.0,
5149*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5150*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5151*a6021da3SAndroid Build Coastguard Worker 
5152*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x3 foo", flags, 0.0,
5153*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5154*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5155*a6021da3SAndroid Build Coastguard Worker 
5156*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 0x3 foo", flags, 0.0,
5157*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5158*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5159*a6021da3SAndroid Build Coastguard Worker 
5160*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ 0x3 foo", flags, 0.0,
5161*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5162*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5163*a6021da3SAndroid Build Coastguard Worker 
5164*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+", flags, 0.0, &processed, &all_used));
5165*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5166*a6021da3SAndroid Build Coastguard Worker 
5167*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("-", flags, 0.0, &processed, &all_used));
5168*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5169*a6021da3SAndroid Build Coastguard Worker 
5170*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- -0x5", flags, 0.0,  &processed, &all_used));
5171*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5172*a6021da3SAndroid Build Coastguard Worker 
5173*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("- +0x5", flags, 0.0,  &processed, &all_used));
5174*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5175*a6021da3SAndroid Build Coastguard Worker 
5176*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("+ +0x5", flags, 0.0,  &processed, &all_used));
5177*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5178*a6021da3SAndroid Build Coastguard Worker 
5179*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0xp1", flags, 0.0, &processed, &all_used));
5180*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5181*a6021da3SAndroid Build Coastguard Worker 
5182*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("0x.p1", flags, 0.0, &processed, &all_used));
5183*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5184*a6021da3SAndroid Build Coastguard Worker 
5185*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::Infinity(), StrToF("0x1.p10000000000000000", flags, 0.0,
5186*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5187*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5188*a6021da3SAndroid Build Coastguard Worker 
5189*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("0x1.p-10000000000000000", flags, 0.0,
5190*a6021da3SAndroid Build Coastguard Worker                                  &processed, &all_used));
5191*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5192*a6021da3SAndroid Build Coastguard Worker }
5193*a6021da3SAndroid Build Coastguard Worker 
5194*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToFloatOctalString)5195*a6021da3SAndroid Build Coastguard Worker TEST(StringToFloatOctalString) {
5196*a6021da3SAndroid Build Coastguard Worker   int flags;
5197*a6021da3SAndroid Build Coastguard Worker   int processed;
5198*a6021da3SAndroid Build Coastguard Worker   bool all_used;
5199*a6021da3SAndroid Build Coastguard Worker   double d;
5200*a6021da3SAndroid Build Coastguard Worker   float f;
5201*a6021da3SAndroid Build Coastguard Worker 
5202*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
5203*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_LEADING_SPACES |
5204*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
5205*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
5206*a6021da3SAndroid Build Coastguard Worker 
5207*a6021da3SAndroid Build Coastguard Worker   // Check that no double rounding occurs:
5208*a6021da3SAndroid Build Coastguard Worker   const char* double_rounding_example1 = "04000000040000000010";
5209*a6021da3SAndroid Build Coastguard Worker   d = StrToD(double_rounding_example1, flags, 0.0, &processed, &all_used);
5210*a6021da3SAndroid Build Coastguard Worker   f = StrToF(double_rounding_example1, flags, 0.0f, &processed, &all_used);
5211*a6021da3SAndroid Build Coastguard Worker   CHECK(f != static_cast<float>(d));
5212*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057602627862528.0f, StrToF(double_rounding_example1,
5213*a6021da3SAndroid Build Coastguard Worker                                         flags, 0.0f, &processed, &all_used));
5214*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5215*a6021da3SAndroid Build Coastguard Worker 
5216*a6021da3SAndroid Build Coastguard Worker   const char* double_rounding_example2 = "04000000137777777770";
5217*a6021da3SAndroid Build Coastguard Worker   d = StrToD(double_rounding_example2, flags, 0.0, &processed, &all_used);
5218*a6021da3SAndroid Build Coastguard Worker   f = StrToF(double_rounding_example2, flags, 0.0f, &processed, &all_used);
5219*a6021da3SAndroid Build Coastguard Worker   CHECK(f != static_cast<float>(d));
5220*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(72057602627862528.0f, StrToF(double_rounding_example2,
5221*a6021da3SAndroid Build Coastguard Worker                                         flags, 0.0f, &processed, &all_used));
5222*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5223*a6021da3SAndroid Build Coastguard Worker 
5224*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 0.0f, &processed, &all_used));
5225*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5226*a6021da3SAndroid Build Coastguard Worker 
5227*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00", flags, 1.0f, &processed, &all_used));
5228*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5229*a6021da3SAndroid Build Coastguard Worker 
5230*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 1.0f, &processed, &all_used));
5231*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5232*a6021da3SAndroid Build Coastguard Worker 
5233*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5234*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789", flags, Single::NaN(), &processed, &all_used));
5235*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5236*a6021da3SAndroid Build Coastguard Worker 
5237*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5238*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567", flags, Single::NaN(), &processed, &all_used));
5239*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5240*a6021da3SAndroid Build Coastguard Worker 
5241*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5242*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5243*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5244*a6021da3SAndroid Build Coastguard Worker 
5245*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5246*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5247*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5248*a6021da3SAndroid Build Coastguard Worker 
5249*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF(" 012", flags, 0.0f, &processed, &all_used));
5250*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5251*a6021da3SAndroid Build Coastguard Worker 
5252*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" 00", flags, 1.0f, &processed, &all_used));
5253*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5254*a6021da3SAndroid Build Coastguard Worker 
5255*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF(" 012", flags, 1.0f, &processed, &all_used));
5256*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5257*a6021da3SAndroid Build Coastguard Worker 
5258*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5259*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789", flags, Single::NaN(), &processed, &all_used));
5260*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5261*a6021da3SAndroid Build Coastguard Worker 
5262*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5263*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567", flags, Single::NaN(), &processed, &all_used));
5264*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5265*a6021da3SAndroid Build Coastguard Worker 
5266*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5267*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567", flags, Single::NaN(), &processed, &all_used));
5268*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5269*a6021da3SAndroid Build Coastguard Worker 
5270*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5271*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567", flags, Single::NaN(), &processed, &all_used));
5272*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5273*a6021da3SAndroid Build Coastguard Worker 
5274*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF(" 012 ", flags, 0.0f, &processed, &all_used));
5275*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5276*a6021da3SAndroid Build Coastguard Worker 
5277*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF(" 00 ", flags, 1.0f, &processed, &all_used));
5278*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5279*a6021da3SAndroid Build Coastguard Worker 
5280*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF(" 012 ", flags, 1.0f, &processed, &all_used));
5281*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5282*a6021da3SAndroid Build Coastguard Worker 
5283*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5284*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789 ", flags, Single::NaN(), &processed, &all_used));
5285*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5286*a6021da3SAndroid Build Coastguard Worker 
5287*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5288*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567 ", flags, Single::NaN(), &processed, &all_used));
5289*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5290*a6021da3SAndroid Build Coastguard Worker 
5291*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5292*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567 ", flags, Single::NaN(), &processed, &all_used));
5293*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5294*a6021da3SAndroid Build Coastguard Worker 
5295*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5296*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567 ", flags, Single::NaN(), &processed, &all_used));
5297*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5298*a6021da3SAndroid Build Coastguard Worker 
5299*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 ", flags, 0.0f, &processed, &all_used));
5300*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5301*a6021da3SAndroid Build Coastguard Worker 
5302*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00 ", flags, 1.0f, &processed, &all_used));
5303*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5304*a6021da3SAndroid Build Coastguard Worker 
5305*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 ", flags, 1.0f, &processed, &all_used));
5306*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5307*a6021da3SAndroid Build Coastguard Worker 
5308*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5309*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 ", flags, Single::NaN(), &processed, &all_used));
5310*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5311*a6021da3SAndroid Build Coastguard Worker 
5312*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5313*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 ", flags, Single::NaN(), &processed, &all_used));
5314*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5315*a6021da3SAndroid Build Coastguard Worker 
5316*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5317*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5318*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5319*a6021da3SAndroid Build Coastguard Worker 
5320*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5321*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5322*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5323*a6021da3SAndroid Build Coastguard Worker 
5324*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5325*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567e0", flags, Single::NaN(), &processed, &all_used));
5326*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5327*a6021da3SAndroid Build Coastguard Worker 
5328*a6021da3SAndroid Build Coastguard Worker 
5329*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS;
5330*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 0.0f, &processed, &all_used));
5331*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5332*a6021da3SAndroid Build Coastguard Worker 
5333*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00", flags, 1.0f, &processed, &all_used));
5334*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5335*a6021da3SAndroid Build Coastguard Worker 
5336*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 1.0f, &processed, &all_used));
5337*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5338*a6021da3SAndroid Build Coastguard Worker 
5339*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5340*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789", flags, Single::NaN(), &processed, &all_used));
5341*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5342*a6021da3SAndroid Build Coastguard Worker 
5343*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5344*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567", flags, Single::NaN(), &processed, &all_used));
5345*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5346*a6021da3SAndroid Build Coastguard Worker 
5347*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5348*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5349*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5350*a6021da3SAndroid Build Coastguard Worker 
5351*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5352*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5353*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5354*a6021da3SAndroid Build Coastguard Worker 
5355*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 0.0f, &processed, &all_used));
5356*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5357*a6021da3SAndroid Build Coastguard Worker 
5358*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00", flags, 1.0f, &processed, &all_used));
5359*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5360*a6021da3SAndroid Build Coastguard Worker 
5361*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 1.0f, &processed, &all_used));
5362*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5363*a6021da3SAndroid Build Coastguard Worker 
5364*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5365*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789", flags, Single::NaN(), &processed, &all_used));
5366*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5367*a6021da3SAndroid Build Coastguard Worker 
5368*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5369*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567", flags, Single::NaN(), &processed, &all_used));
5370*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5371*a6021da3SAndroid Build Coastguard Worker 
5372*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5373*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567", flags, Single::NaN(), &processed, &all_used));
5374*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5375*a6021da3SAndroid Build Coastguard Worker 
5376*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5377*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567", flags, Single::NaN(), &processed, &all_used));
5378*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5379*a6021da3SAndroid Build Coastguard Worker 
5380*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 0.0f, &processed, &all_used));
5381*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5382*a6021da3SAndroid Build Coastguard Worker 
5383*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00 ", flags, 1.0f, &processed, &all_used));
5384*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5385*a6021da3SAndroid Build Coastguard Worker 
5386*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 1.0f, &processed, &all_used));
5387*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5388*a6021da3SAndroid Build Coastguard Worker 
5389*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5390*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789 ", flags, Single::NaN(), &processed, &all_used));
5391*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5392*a6021da3SAndroid Build Coastguard Worker 
5393*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5394*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567 ", flags, Single::NaN(), &processed, &all_used));
5395*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5396*a6021da3SAndroid Build Coastguard Worker 
5397*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5398*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567 ", flags, Single::NaN(), &processed, &all_used));
5399*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5400*a6021da3SAndroid Build Coastguard Worker 
5401*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5402*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567 ", flags, Single::NaN(), &processed, &all_used));
5403*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5404*a6021da3SAndroid Build Coastguard Worker 
5405*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("012 ", flags, 0.0f, &processed, &all_used));
5406*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5407*a6021da3SAndroid Build Coastguard Worker 
5408*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("00 ", flags, 1.0f, &processed, &all_used));
5409*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5410*a6021da3SAndroid Build Coastguard Worker 
5411*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF("012 ", flags, 1.0f, &processed, &all_used));
5412*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5413*a6021da3SAndroid Build Coastguard Worker 
5414*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5415*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 ", flags, Single::NaN(), &processed, &all_used));
5416*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5417*a6021da3SAndroid Build Coastguard Worker 
5418*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5419*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 ", flags, Single::NaN(), &processed, &all_used));
5420*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5421*a6021da3SAndroid Build Coastguard Worker 
5422*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5423*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5424*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5425*a6021da3SAndroid Build Coastguard Worker 
5426*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5427*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5428*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5429*a6021da3SAndroid Build Coastguard Worker 
5430*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5431*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567e0", flags, Single::NaN(), &processed, &all_used));
5432*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5433*a6021da3SAndroid Build Coastguard Worker 
5434*a6021da3SAndroid Build Coastguard Worker 
5435*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
5436*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
5437*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 0.0f, &processed, &all_used));
5438*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5439*a6021da3SAndroid Build Coastguard Worker 
5440*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00", flags, 1.0f, &processed, &all_used));
5441*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5442*a6021da3SAndroid Build Coastguard Worker 
5443*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 1.0f, &processed, &all_used));
5444*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5445*a6021da3SAndroid Build Coastguard Worker 
5446*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5447*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789", flags, Single::NaN(), &processed, &all_used));
5448*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5449*a6021da3SAndroid Build Coastguard Worker 
5450*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5451*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567", flags, Single::NaN(), &processed, &all_used));
5452*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5453*a6021da3SAndroid Build Coastguard Worker 
5454*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5455*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5456*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5457*a6021da3SAndroid Build Coastguard Worker 
5458*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5459*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5460*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5461*a6021da3SAndroid Build Coastguard Worker 
5462*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 0.0f, &processed, &all_used));
5463*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5464*a6021da3SAndroid Build Coastguard Worker 
5465*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00", flags, 1.0f, &processed, &all_used));
5466*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5467*a6021da3SAndroid Build Coastguard Worker 
5468*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 1.0f, &processed, &all_used));
5469*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5470*a6021da3SAndroid Build Coastguard Worker 
5471*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5472*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789", flags, Single::NaN(), &processed, &all_used));
5473*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5474*a6021da3SAndroid Build Coastguard Worker 
5475*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5476*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567", flags, Single::NaN(), &processed, &all_used));
5477*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5478*a6021da3SAndroid Build Coastguard Worker 
5479*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5480*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567", flags, Single::NaN(), &processed, &all_used));
5481*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5482*a6021da3SAndroid Build Coastguard Worker 
5483*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5484*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567", flags, Single::NaN(), &processed, &all_used));
5485*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5486*a6021da3SAndroid Build Coastguard Worker 
5487*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 0.0f, &processed, &all_used));
5488*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5489*a6021da3SAndroid Build Coastguard Worker 
5490*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00 ", flags, 1.0f, &processed, &all_used));
5491*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5492*a6021da3SAndroid Build Coastguard Worker 
5493*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 1.0f, &processed, &all_used));
5494*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5495*a6021da3SAndroid Build Coastguard Worker 
5496*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5497*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789 ", flags, Single::NaN(), &processed, &all_used));
5498*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5499*a6021da3SAndroid Build Coastguard Worker 
5500*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5501*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567 ", flags, Single::NaN(), &processed, &all_used));
5502*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5503*a6021da3SAndroid Build Coastguard Worker 
5504*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5505*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567 ", flags, Single::NaN(), &processed, &all_used));
5506*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5507*a6021da3SAndroid Build Coastguard Worker 
5508*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5509*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567 ", flags, Single::NaN(), &processed, &all_used));
5510*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5511*a6021da3SAndroid Build Coastguard Worker 
5512*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 ", flags, 0.0f, &processed, &all_used));
5513*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5514*a6021da3SAndroid Build Coastguard Worker 
5515*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00 ", flags, 1.0f, &processed, &all_used));
5516*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
5517*a6021da3SAndroid Build Coastguard Worker 
5518*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5519*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 ", flags, Single::NaN(), &processed, &all_used));
5520*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5521*a6021da3SAndroid Build Coastguard Worker 
5522*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5523*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 ", flags, Single::NaN(), &processed, &all_used));
5524*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5525*a6021da3SAndroid Build Coastguard Worker 
5526*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5527*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5528*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5529*a6021da3SAndroid Build Coastguard Worker 
5530*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5531*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5532*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5533*a6021da3SAndroid Build Coastguard Worker 
5534*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012foo ", flags, 0.0f, &processed, &all_used));
5535*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5536*a6021da3SAndroid Build Coastguard Worker 
5537*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00foo ", flags, 1.0f, &processed, &all_used));
5538*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
5539*a6021da3SAndroid Build Coastguard Worker 
5540*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5541*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789foo ", flags, Single::NaN(),
5542*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5543*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5544*a6021da3SAndroid Build Coastguard Worker 
5545*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5546*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567foo ", flags, Single::NaN(), &processed, &all_used));
5547*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5548*a6021da3SAndroid Build Coastguard Worker 
5549*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5550*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567foo", flags, Single::NaN(), &processed, &all_used));
5551*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5552*a6021da3SAndroid Build Coastguard Worker 
5553*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5554*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567foo", flags, Single::NaN(), &processed, &all_used));
5555*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5556*a6021da3SAndroid Build Coastguard Worker 
5557*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 foo ", flags, 0.0f, &processed, &all_used));
5558*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5559*a6021da3SAndroid Build Coastguard Worker 
5560*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00 foo ", flags, 1.0f, &processed, &all_used));
5561*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
5562*a6021da3SAndroid Build Coastguard Worker 
5563*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5564*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 foo ", flags, Single::NaN(),
5565*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5566*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5567*a6021da3SAndroid Build Coastguard Worker 
5568*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5569*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 foo ", flags, Single::NaN(),
5570*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5571*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5572*a6021da3SAndroid Build Coastguard Worker 
5573*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5574*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567 foo", flags, Single::NaN(),
5575*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5576*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5577*a6021da3SAndroid Build Coastguard Worker 
5578*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5579*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567 foo", flags, Single::NaN(), &processed,
5580*a6021da3SAndroid Build Coastguard Worker                   &all_used));
5581*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5582*a6021da3SAndroid Build Coastguard Worker 
5583*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5584*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567e0", flags, Single::NaN(), &processed, &all_used));
5585*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5586*a6021da3SAndroid Build Coastguard Worker 
5587*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5588*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567e", flags, Single::NaN(), &processed, &all_used));
5589*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5590*a6021da3SAndroid Build Coastguard Worker 
5591*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_OCTALS |
5592*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
5593*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_JUNK;
5594*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 0.0f, &processed, &all_used));
5595*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5596*a6021da3SAndroid Build Coastguard Worker 
5597*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00", flags, 1.0f, &processed, &all_used));
5598*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5599*a6021da3SAndroid Build Coastguard Worker 
5600*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012", flags, 1.0f, &processed, &all_used));
5601*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5602*a6021da3SAndroid Build Coastguard Worker 
5603*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5604*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789", flags, Single::NaN(), &processed, &all_used));
5605*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5606*a6021da3SAndroid Build Coastguard Worker 
5607*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5608*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567", flags, Single::NaN(), &processed, &all_used));
5609*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5610*a6021da3SAndroid Build Coastguard Worker 
5611*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5612*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5613*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5614*a6021da3SAndroid Build Coastguard Worker 
5615*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5616*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5617*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5618*a6021da3SAndroid Build Coastguard Worker 
5619*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 0.0f, &processed, &all_used));
5620*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5621*a6021da3SAndroid Build Coastguard Worker 
5622*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00", flags, 1.0f, &processed, &all_used));
5623*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5624*a6021da3SAndroid Build Coastguard Worker 
5625*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012", flags, 1.0f, &processed, &all_used));
5626*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5627*a6021da3SAndroid Build Coastguard Worker 
5628*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5629*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789", flags, Single::NaN(), &processed, &all_used));
5630*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5631*a6021da3SAndroid Build Coastguard Worker 
5632*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5633*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567", flags, Single::NaN(), &processed, &all_used));
5634*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5635*a6021da3SAndroid Build Coastguard Worker 
5636*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5637*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567", flags, Single::NaN(), &processed, &all_used));
5638*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5639*a6021da3SAndroid Build Coastguard Worker 
5640*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5641*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567", flags, Single::NaN(), &processed, &all_used));
5642*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5643*a6021da3SAndroid Build Coastguard Worker 
5644*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 0.0f, &processed, &all_used));
5645*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5646*a6021da3SAndroid Build Coastguard Worker 
5647*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 00 ", flags, 1.0f, &processed, &all_used));
5648*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5649*a6021da3SAndroid Build Coastguard Worker 
5650*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(), StrToF(" 012 ", flags, 1.0f, &processed, &all_used));
5651*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5652*a6021da3SAndroid Build Coastguard Worker 
5653*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5654*a6021da3SAndroid Build Coastguard Worker            StrToF(" 0123456789 ", flags, Single::NaN(), &processed, &all_used));
5655*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5656*a6021da3SAndroid Build Coastguard Worker 
5657*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5658*a6021da3SAndroid Build Coastguard Worker            StrToF(" 01234567 ", flags, Single::NaN(), &processed, &all_used));
5659*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5660*a6021da3SAndroid Build Coastguard Worker 
5661*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5662*a6021da3SAndroid Build Coastguard Worker            StrToF(" + 01234567 ", flags, Single::NaN(), &processed, &all_used));
5663*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5664*a6021da3SAndroid Build Coastguard Worker 
5665*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Single::NaN(),
5666*a6021da3SAndroid Build Coastguard Worker            StrToF(" - 01234567 ", flags, Single::NaN(), &processed, &all_used));
5667*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5668*a6021da3SAndroid Build Coastguard Worker 
5669*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 ", flags, 0.0f, &processed, &all_used));
5670*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5671*a6021da3SAndroid Build Coastguard Worker 
5672*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00 ", flags, 1.0f, &processed, &all_used));
5673*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5674*a6021da3SAndroid Build Coastguard Worker 
5675*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5676*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 ", flags, Single::NaN(), &processed, &all_used));
5677*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5678*a6021da3SAndroid Build Coastguard Worker 
5679*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5680*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 ", flags, Single::NaN(), &processed, &all_used));
5681*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5682*a6021da3SAndroid Build Coastguard Worker 
5683*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5684*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567", flags, Single::NaN(), &processed, &all_used));
5685*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5686*a6021da3SAndroid Build Coastguard Worker 
5687*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5688*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567", flags, Single::NaN(), &processed, &all_used));
5689*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5690*a6021da3SAndroid Build Coastguard Worker 
5691*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012foo ", flags, 0.0f, &processed, &all_used));
5692*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5693*a6021da3SAndroid Build Coastguard Worker 
5694*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00foo ", flags, 1.0f, &processed, &all_used));
5695*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(2, processed);
5696*a6021da3SAndroid Build Coastguard Worker 
5697*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5698*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789foo ", flags, Single::NaN(),
5699*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5700*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5701*a6021da3SAndroid Build Coastguard Worker 
5702*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5703*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567foo ", flags, Single::NaN(), &processed, &all_used));
5704*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5705*a6021da3SAndroid Build Coastguard Worker 
5706*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5707*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567foo", flags, Single::NaN(), &processed, &all_used));
5708*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5709*a6021da3SAndroid Build Coastguard Worker 
5710*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5711*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567foo", flags, Single::NaN(), &processed, &all_used));
5712*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5713*a6021da3SAndroid Build Coastguard Worker 
5714*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10.0f, StrToF("012 foo ", flags, 0.0f, &processed, &all_used));
5715*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
5716*a6021da3SAndroid Build Coastguard Worker 
5717*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0.0f, StrToF("00 foo ", flags, 1.0f, &processed, &all_used));
5718*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5719*a6021da3SAndroid Build Coastguard Worker 
5720*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(123456789.0f,
5721*a6021da3SAndroid Build Coastguard Worker            StrToF("0123456789 foo ", flags, Single::NaN(),
5722*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5723*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(11, processed);
5724*a6021da3SAndroid Build Coastguard Worker 
5725*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5726*a6021da3SAndroid Build Coastguard Worker            StrToF("01234567 foo ", flags, Single::NaN(),
5727*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5728*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5729*a6021da3SAndroid Build Coastguard Worker 
5730*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(342391.0f,
5731*a6021da3SAndroid Build Coastguard Worker            StrToF("+01234567 foo", flags, Single::NaN(),
5732*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5733*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5734*a6021da3SAndroid Build Coastguard Worker 
5735*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-342391.0f,
5736*a6021da3SAndroid Build Coastguard Worker            StrToF("-01234567 foo", flags, Single::NaN(),
5737*a6021da3SAndroid Build Coastguard Worker                   &processed, &all_used));
5738*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(10, processed);
5739*a6021da3SAndroid Build Coastguard Worker }
5740*a6021da3SAndroid Build Coastguard Worker 
5741*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToFloatSpecialValues)5742*a6021da3SAndroid Build Coastguard Worker TEST(StringToFloatSpecialValues) {
5743*a6021da3SAndroid Build Coastguard Worker   int processed;
5744*a6021da3SAndroid Build Coastguard Worker   int flags = StringToDoubleConverter::NO_FLAGS;
5745*a6021da3SAndroid Build Coastguard Worker 
5746*a6021da3SAndroid Build Coastguard Worker   {
5747*a6021da3SAndroid Build Coastguard Worker     // Use 1.0 as junk_string_value.
5748*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter converter(flags, 0.0f, 1.0f, "infinity", "NaN");
5749*a6021da3SAndroid Build Coastguard Worker 
5750*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(Single::NaN(), converter.StringToDouble("+NaN", 4, &processed));
5751*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(4, processed);
5752*a6021da3SAndroid Build Coastguard Worker 
5753*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(-Single::Infinity(),
5754*a6021da3SAndroid Build Coastguard Worker              converter.StringToDouble("-infinity", 9, &processed));
5755*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(9, processed);
5756*a6021da3SAndroid Build Coastguard Worker 
5757*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0f, converter.StringToDouble("Infinity", 8, &processed));
5758*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
5759*a6021da3SAndroid Build Coastguard Worker 
5760*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0f, converter.StringToDouble("++NaN", 5, &processed));
5761*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
5762*a6021da3SAndroid Build Coastguard Worker   }
5763*a6021da3SAndroid Build Coastguard Worker 
5764*a6021da3SAndroid Build Coastguard Worker   {
5765*a6021da3SAndroid Build Coastguard Worker     // Use 1.0 as junk_string_value.
5766*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter converter(flags, 0.0f, 1.0f, "+infinity", "1NaN");
5767*a6021da3SAndroid Build Coastguard Worker 
5768*a6021da3SAndroid Build Coastguard Worker     // The '+' is consumed before trying to match the infinity string.
5769*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0f, converter.StringToDouble("+infinity", 9, &processed));
5770*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
5771*a6021da3SAndroid Build Coastguard Worker 
5772*a6021da3SAndroid Build Coastguard Worker     // The match for "1NaN" triggers, and doesn't let the 1234.0 complete.
5773*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(1.0f, converter.StringToDouble("1234.0", 6, &processed));
5774*a6021da3SAndroid Build Coastguard Worker     CHECK_EQ(0, processed);
5775*a6021da3SAndroid Build Coastguard Worker   }
5776*a6021da3SAndroid Build Coastguard Worker }
5777*a6021da3SAndroid Build Coastguard Worker 
5778*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleFloatWhitespace)5779*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleFloatWhitespace) {
5780*a6021da3SAndroid Build Coastguard Worker   int flags;
5781*a6021da3SAndroid Build Coastguard Worker   int processed;
5782*a6021da3SAndroid Build Coastguard Worker   bool all_used;
5783*a6021da3SAndroid Build Coastguard Worker 
5784*a6021da3SAndroid Build Coastguard Worker   flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
5785*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_TRAILING_SPACES |
5786*a6021da3SAndroid Build Coastguard Worker       StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN;
5787*a6021da3SAndroid Build Coastguard Worker 
5788*a6021da3SAndroid Build Coastguard Worker   const char kWhitespaceAscii[] = {
5789*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20,
5790*a6021da3SAndroid Build Coastguard Worker     '-',
5791*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20,
5792*a6021da3SAndroid Build Coastguard Worker     '1', '.', '2',
5793*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20,
5794*a6021da3SAndroid Build Coastguard Worker     0x00
5795*a6021da3SAndroid Build Coastguard Worker   };
5796*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-1.2, StrToD(kWhitespaceAscii, flags, Double::NaN(),
5797*a6021da3SAndroid Build Coastguard Worker                         &processed, &all_used));
5798*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5799*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-1.2f, StrToF(kWhitespaceAscii, flags, Double::NaN(),
5800*a6021da3SAndroid Build Coastguard Worker                          &processed, &all_used));
5801*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5802*a6021da3SAndroid Build Coastguard Worker 
5803*a6021da3SAndroid Build Coastguard Worker   const uc16 kOghamSpaceMark = 0x1680;
5804*a6021da3SAndroid Build Coastguard Worker   const uc16 kMongolianVowelSeparator = 0x180E;
5805*a6021da3SAndroid Build Coastguard Worker   const uc16 kEnQuad = 0x2000;
5806*a6021da3SAndroid Build Coastguard Worker   const uc16 kEmQuad = 0x2001;
5807*a6021da3SAndroid Build Coastguard Worker   const uc16 kEnSpace = 0x2002;
5808*a6021da3SAndroid Build Coastguard Worker   const uc16 kEmSpace = 0x2003;
5809*a6021da3SAndroid Build Coastguard Worker   const uc16 kThreePerEmSpace = 0x2004;
5810*a6021da3SAndroid Build Coastguard Worker   const uc16 kFourPerEmSpace = 0x2005;
5811*a6021da3SAndroid Build Coastguard Worker   const uc16 kSixPerEmSpace = 0x2006;
5812*a6021da3SAndroid Build Coastguard Worker   const uc16 kFigureSpace = 0x2007;
5813*a6021da3SAndroid Build Coastguard Worker   const uc16 kPunctuationSpace = 0x2008;
5814*a6021da3SAndroid Build Coastguard Worker   const uc16 kThinSpace = 0x2009;
5815*a6021da3SAndroid Build Coastguard Worker   const uc16 kHairSpace = 0x200A;
5816*a6021da3SAndroid Build Coastguard Worker   const uc16 kNarrowNoBreakSpace = 0x202F;
5817*a6021da3SAndroid Build Coastguard Worker   const uc16 kMediumMathematicalSpace = 0x205F;
5818*a6021da3SAndroid Build Coastguard Worker   const uc16 kIdeographicSpace = 0x3000;
5819*a6021da3SAndroid Build Coastguard Worker 
5820*a6021da3SAndroid Build Coastguard Worker   const uc16 kWhitespace16[] = {
5821*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20, 0xA0, 0xFEFF,
5822*a6021da3SAndroid Build Coastguard Worker     kOghamSpaceMark, kMongolianVowelSeparator, kEnQuad, kEmQuad,
5823*a6021da3SAndroid Build Coastguard Worker     kEnSpace, kEmSpace, kThreePerEmSpace, kFourPerEmSpace, kSixPerEmSpace,
5824*a6021da3SAndroid Build Coastguard Worker     kFigureSpace, kPunctuationSpace, kThinSpace, kHairSpace,
5825*a6021da3SAndroid Build Coastguard Worker     kNarrowNoBreakSpace, kMediumMathematicalSpace, kIdeographicSpace,
5826*a6021da3SAndroid Build Coastguard Worker     '-',
5827*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20, 0xA0, 0xFEFF,
5828*a6021da3SAndroid Build Coastguard Worker     kOghamSpaceMark, kMongolianVowelSeparator, kEnQuad, kEmQuad,
5829*a6021da3SAndroid Build Coastguard Worker     kEnSpace, kEmSpace, kThreePerEmSpace, kFourPerEmSpace, kSixPerEmSpace,
5830*a6021da3SAndroid Build Coastguard Worker     kFigureSpace, kPunctuationSpace, kThinSpace, kHairSpace,
5831*a6021da3SAndroid Build Coastguard Worker     kNarrowNoBreakSpace, kMediumMathematicalSpace, kIdeographicSpace,
5832*a6021da3SAndroid Build Coastguard Worker     '1', '.', '2',
5833*a6021da3SAndroid Build Coastguard Worker     0x0A, 0x0D, 0x09, 0x0B, 0x0C, 0x20, 0xA0, 0xFEFF,
5834*a6021da3SAndroid Build Coastguard Worker     kOghamSpaceMark, kMongolianVowelSeparator, kEnQuad, kEmQuad,
5835*a6021da3SAndroid Build Coastguard Worker     kEnSpace, kEmSpace, kThreePerEmSpace, kFourPerEmSpace, kSixPerEmSpace,
5836*a6021da3SAndroid Build Coastguard Worker     kFigureSpace, kPunctuationSpace, kThinSpace, kHairSpace,
5837*a6021da3SAndroid Build Coastguard Worker     kNarrowNoBreakSpace, kMediumMathematicalSpace, kIdeographicSpace,
5838*a6021da3SAndroid Build Coastguard Worker   };
5839*a6021da3SAndroid Build Coastguard Worker   const int kWhitespace16Length = DOUBLE_CONVERSION_ARRAY_SIZE(kWhitespace16);
5840*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-1.2, StrToD16(kWhitespace16, kWhitespace16Length, flags,
5841*a6021da3SAndroid Build Coastguard Worker                           Double::NaN(),
5842*a6021da3SAndroid Build Coastguard Worker                           &processed, &all_used));
5843*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5844*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-1.2f, StrToF16(kWhitespace16, kWhitespace16Length, flags,
5845*a6021da3SAndroid Build Coastguard Worker                            Single::NaN(),
5846*a6021da3SAndroid Build Coastguard Worker                            &processed, &all_used));
5847*a6021da3SAndroid Build Coastguard Worker   CHECK(all_used);
5848*a6021da3SAndroid Build Coastguard Worker }
5849*a6021da3SAndroid Build Coastguard Worker 
5850*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToDoubleCaseInsensitiveSpecialValues)5851*a6021da3SAndroid Build Coastguard Worker TEST(StringToDoubleCaseInsensitiveSpecialValues) {
5852*a6021da3SAndroid Build Coastguard Worker   int processed = 0;
5853*a6021da3SAndroid Build Coastguard Worker 
5854*a6021da3SAndroid Build Coastguard Worker   int flags = StringToDoubleConverter::ALLOW_CASE_INSENSITIVITY |
5855*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter::ALLOW_LEADING_SPACES |
5856*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter::ALLOW_TRAILING_JUNK |
5857*a6021da3SAndroid Build Coastguard Worker     StringToDoubleConverter::ALLOW_TRAILING_SPACES;
5858*a6021da3SAndroid Build Coastguard Worker 
5859*a6021da3SAndroid Build Coastguard Worker   // Use 1.0 as junk_string_value.
5860*a6021da3SAndroid Build Coastguard Worker   StringToDoubleConverter converter(flags, 0.0, 1.0, "infinity", "nan");
5861*a6021da3SAndroid Build Coastguard Worker 
5862*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), converter.StringToDouble("+nan", 4, &processed));
5863*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
5864*a6021da3SAndroid Build Coastguard Worker 
5865*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), converter.StringToDouble("-nAN", 4, &processed));
5866*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(4, processed);
5867*a6021da3SAndroid Build Coastguard Worker 
5868*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), converter.StringToDouble("nAN", 3, &processed));
5869*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5870*a6021da3SAndroid Build Coastguard Worker 
5871*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::NaN(), converter.StringToDouble("nANabc", 6, &processed));
5872*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(3, processed);
5873*a6021da3SAndroid Build Coastguard Worker 
5874*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(+Double::Infinity(),
5875*a6021da3SAndroid Build Coastguard Worker            converter.StringToDouble("+Infinity", 9, &processed));
5876*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5877*a6021da3SAndroid Build Coastguard Worker 
5878*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(-Double::Infinity(),
5879*a6021da3SAndroid Build Coastguard Worker            converter.StringToDouble("-INFinity", 9, &processed));
5880*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(9, processed);
5881*a6021da3SAndroid Build Coastguard Worker 
5882*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(Double::Infinity(),
5883*a6021da3SAndroid Build Coastguard Worker            converter.StringToDouble("infINITY", 8, &processed));
5884*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(8, processed);
5885*a6021da3SAndroid Build Coastguard Worker 
5886*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, converter.StringToDouble("INF", 3, &processed));
5887*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5888*a6021da3SAndroid Build Coastguard Worker 
5889*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(1.0, converter.StringToDouble("+inf", 4, &processed));
5890*a6021da3SAndroid Build Coastguard Worker   CHECK_EQ(0, processed);
5891*a6021da3SAndroid Build Coastguard Worker }
5892*a6021da3SAndroid Build Coastguard Worker 
5893*a6021da3SAndroid Build Coastguard Worker 
TEST(StringToTemplate)5894*a6021da3SAndroid Build Coastguard Worker TEST(StringToTemplate) {
5895*a6021da3SAndroid Build Coastguard Worker     // Test StringToDoubleConverter::StringTo<T>.
5896*a6021da3SAndroid Build Coastguard Worker 
5897*a6021da3SAndroid Build Coastguard Worker     const StringToDoubleConverter converter(StringToDoubleConverter::ALLOW_HEX, 0.0, Double::NaN(), "inf", "nan");
5898*a6021da3SAndroid Build Coastguard Worker 
5899*a6021da3SAndroid Build Coastguard Worker     // First simply check conversion from "0" and "1":
5900*a6021da3SAndroid Build Coastguard Worker     for (int i = 0; i <= 1; ++i)
5901*a6021da3SAndroid Build Coastguard Worker     {
5902*a6021da3SAndroid Build Coastguard Worker         const char c = '0' + i;
5903*a6021da3SAndroid Build Coastguard Worker 
5904*a6021da3SAndroid Build Coastguard Worker         int processed = 0;
5905*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(static_cast<double>(i), converter.StringTo<double>(&c, 1, &processed));
5906*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(1, processed);
5907*a6021da3SAndroid Build Coastguard Worker 
5908*a6021da3SAndroid Build Coastguard Worker         processed = 0;
5909*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(static_cast<float>(i), converter.StringTo<float>(&c, 1, &processed));
5910*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(1, processed);
5911*a6021da3SAndroid Build Coastguard Worker 
5912*a6021da3SAndroid Build Coastguard Worker         const uc16 buffer16[1] = { static_cast<uc16>(c) };
5913*a6021da3SAndroid Build Coastguard Worker 
5914*a6021da3SAndroid Build Coastguard Worker         processed = 0;
5915*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(static_cast<double>(i), converter.StringTo<double>(buffer16, 1, &processed));
5916*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(1, processed);
5917*a6021da3SAndroid Build Coastguard Worker 
5918*a6021da3SAndroid Build Coastguard Worker         processed = 0;
5919*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(static_cast<float>(i), converter.StringTo<float>(buffer16, 1, &processed));
5920*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(1, processed);
5921*a6021da3SAndroid Build Coastguard Worker     }
5922*a6021da3SAndroid Build Coastguard Worker     {
5923*a6021da3SAndroid Build Coastguard Worker         // A number that can be represented by a double, but not by a float.
5924*a6021da3SAndroid Build Coastguard Worker         // Allows testing that StringTo<double> behaves like StringToDouble
5925*a6021da3SAndroid Build Coastguard Worker         // (and not like StringToFloat).
5926*a6021da3SAndroid Build Coastguard Worker         const char buffer[] = "1e+100";
5927*a6021da3SAndroid Build Coastguard Worker         const int length = DOUBLE_CONVERSION_ARRAY_SIZE(buffer) - 1;
5928*a6021da3SAndroid Build Coastguard Worker 
5929*a6021da3SAndroid Build Coastguard Worker         int processed1 = 1;
5930*a6021da3SAndroid Build Coastguard Worker         int processed2 = 2;
5931*a6021da3SAndroid Build Coastguard Worker 
5932*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(converter.StringToDouble(buffer, length, &processed1),
5933*a6021da3SAndroid Build Coastguard Worker                  converter.StringTo<double>(buffer, length, &processed2));
5934*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(processed1, processed2);
5935*a6021da3SAndroid Build Coastguard Worker 
5936*a6021da3SAndroid Build Coastguard Worker         uc16 buffer16[DOUBLE_CONVERSION_ARRAY_SIZE(buffer)];
5937*a6021da3SAndroid Build Coastguard Worker 
5938*a6021da3SAndroid Build Coastguard Worker         for (int i = 0; i <= length; ++i) {
5939*a6021da3SAndroid Build Coastguard Worker             buffer16[i] = buffer[i];
5940*a6021da3SAndroid Build Coastguard Worker         }
5941*a6021da3SAndroid Build Coastguard Worker 
5942*a6021da3SAndroid Build Coastguard Worker         processed1 = 1;
5943*a6021da3SAndroid Build Coastguard Worker         processed2 = 2;
5944*a6021da3SAndroid Build Coastguard Worker 
5945*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(converter.StringToDouble(buffer16, length, &processed1),
5946*a6021da3SAndroid Build Coastguard Worker                  converter.StringTo<double>(buffer16, length, &processed2));
5947*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(processed1, processed2);
5948*a6021da3SAndroid Build Coastguard Worker     }
5949*a6021da3SAndroid Build Coastguard Worker     {
5950*a6021da3SAndroid Build Coastguard Worker         // The double rounding example from TEST(StringToFloatHexString), which
5951*a6021da3SAndroid Build Coastguard Worker         // yields a slightly different result from StringToFloat than from
5952*a6021da3SAndroid Build Coastguard Worker         // StringToDouble. Allows testing that StringTo<float> behaves like
5953*a6021da3SAndroid Build Coastguard Worker         // StringToFloat (rather than like StringToDouble).
5954*a6021da3SAndroid Build Coastguard Worker         const char buffer[] = "0x100000100000008";
5955*a6021da3SAndroid Build Coastguard Worker         const int length = DOUBLE_CONVERSION_ARRAY_SIZE(buffer) - 1;
5956*a6021da3SAndroid Build Coastguard Worker 
5957*a6021da3SAndroid Build Coastguard Worker         int processed1 = 1;
5958*a6021da3SAndroid Build Coastguard Worker         int processed2 = 2;
5959*a6021da3SAndroid Build Coastguard Worker 
5960*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(converter.StringToFloat(buffer, length, &processed1),
5961*a6021da3SAndroid Build Coastguard Worker                  converter.StringTo<float>(buffer, length, &processed2));
5962*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(processed1, processed2);
5963*a6021da3SAndroid Build Coastguard Worker 
5964*a6021da3SAndroid Build Coastguard Worker         uc16 buffer16[DOUBLE_CONVERSION_ARRAY_SIZE(buffer)];
5965*a6021da3SAndroid Build Coastguard Worker 
5966*a6021da3SAndroid Build Coastguard Worker         for (int i = 0; i <= length; ++i) {
5967*a6021da3SAndroid Build Coastguard Worker             buffer16[i] = buffer[i];
5968*a6021da3SAndroid Build Coastguard Worker         }
5969*a6021da3SAndroid Build Coastguard Worker 
5970*a6021da3SAndroid Build Coastguard Worker         processed1 = 1;
5971*a6021da3SAndroid Build Coastguard Worker         processed2 = 2;
5972*a6021da3SAndroid Build Coastguard Worker 
5973*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(converter.StringToFloat(buffer16, length, &processed1),
5974*a6021da3SAndroid Build Coastguard Worker                  converter.StringTo<float>(buffer16, length, &processed2));
5975*a6021da3SAndroid Build Coastguard Worker         CHECK_EQ(processed1, processed2);
5976*a6021da3SAndroid Build Coastguard Worker     }
5977*a6021da3SAndroid Build Coastguard Worker }
5978