Line data Source code
1 : // Copyright 2010 the V8 project authors. All rights reserved.
2 : // Redistribution and use in source and binary forms, with or without
3 : // modification, are permitted provided that the following conditions are
4 : // met:
5 : //
6 : // * Redistributions of source code must retain the above copyright
7 : // notice, this list of conditions and the following disclaimer.
8 : // * Redistributions in binary form must reproduce the above
9 : // copyright notice, this list of conditions and the following
10 : // disclaimer in the documentation and/or other materials provided
11 : // with the distribution.
12 : // * Neither the name of Google Inc. nor the names of its
13 : // contributors may be used to endorse or promote products derived
14 : // from this software without specific prior written permission.
15 : //
16 : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 : // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 : // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 : // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 : // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 : // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 : // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 : // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 : // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 : // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 :
28 : #include <stdlib.h>
29 :
30 : #include "src/v8.h"
31 :
32 : #include "src/base/platform/platform.h"
33 : #include "src/double.h"
34 : #include "src/fixed-dtoa.h"
35 : #include "test/cctest/cctest.h"
36 : #include "test/cctest/gay-fixed.h"
37 :
38 : namespace v8 {
39 : namespace internal {
40 :
41 : static const int kBufferSize = 500;
42 :
43 23724 : TEST(FastFixedVariousDoubles) {
44 : char buffer_container[kBufferSize];
45 : Vector<char> buffer(buffer_container, kBufferSize);
46 : int length;
47 : int point;
48 :
49 6 : CHECK(FastFixedDtoa(1.0, 1, buffer, &length, &point));
50 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
51 6 : CHECK_EQ(1, point);
52 :
53 6 : CHECK(FastFixedDtoa(1.0, 15, buffer, &length, &point));
54 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
55 6 : CHECK_EQ(1, point);
56 :
57 6 : CHECK(FastFixedDtoa(1.0, 0, buffer, &length, &point));
58 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
59 6 : CHECK_EQ(1, point);
60 :
61 6 : CHECK(FastFixedDtoa(0xFFFFFFFF, 5, buffer, &length, &point));
62 6 : CHECK_EQ(0, strcmp("4294967295", buffer.start()));
63 6 : CHECK_EQ(10, point);
64 :
65 6 : CHECK(FastFixedDtoa(4294967296.0, 5, buffer, &length, &point));
66 6 : CHECK_EQ(0, strcmp("4294967296", buffer.start()));
67 6 : CHECK_EQ(10, point);
68 :
69 6 : CHECK(FastFixedDtoa(1e21, 5, buffer, &length, &point));
70 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
71 : // CHECK_EQ(22, point);
72 6 : CHECK_EQ(22, point);
73 :
74 6 : CHECK(FastFixedDtoa(999999999999999868928.00, 2, buffer, &length, &point));
75 6 : CHECK_EQ(0, strcmp("999999999999999868928", buffer.start()));
76 6 : CHECK_EQ(21, point);
77 :
78 6 : CHECK(FastFixedDtoa(6.9999999999999989514240000e+21, 5, buffer,
79 : &length, &point));
80 6 : CHECK_EQ(0, strcmp("6999999999999998951424", buffer.start()));
81 6 : CHECK_EQ(22, point);
82 :
83 6 : CHECK(FastFixedDtoa(1.5, 5, buffer, &length, &point));
84 6 : CHECK_EQ(0, strcmp("15", buffer.start()));
85 6 : CHECK_EQ(1, point);
86 :
87 6 : CHECK(FastFixedDtoa(1.55, 5, buffer, &length, &point));
88 6 : CHECK_EQ(0, strcmp("155", buffer.start()));
89 6 : CHECK_EQ(1, point);
90 :
91 6 : CHECK(FastFixedDtoa(1.55, 1, buffer, &length, &point));
92 6 : CHECK_EQ(0, strcmp("16", buffer.start()));
93 6 : CHECK_EQ(1, point);
94 :
95 6 : CHECK(FastFixedDtoa(1.00000001, 15, buffer, &length, &point));
96 6 : CHECK_EQ(0, strcmp("100000001", buffer.start()));
97 6 : CHECK_EQ(1, point);
98 :
99 6 : CHECK(FastFixedDtoa(0.1, 10, buffer, &length, &point));
100 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
101 6 : CHECK_EQ(0, point);
102 :
103 6 : CHECK(FastFixedDtoa(0.01, 10, buffer, &length, &point));
104 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
105 6 : CHECK_EQ(-1, point);
106 :
107 6 : CHECK(FastFixedDtoa(0.001, 10, buffer, &length, &point));
108 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
109 6 : CHECK_EQ(-2, point);
110 :
111 6 : CHECK(FastFixedDtoa(0.0001, 10, buffer, &length, &point));
112 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
113 6 : CHECK_EQ(-3, point);
114 :
115 6 : CHECK(FastFixedDtoa(0.00001, 10, buffer, &length, &point));
116 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
117 6 : CHECK_EQ(-4, point);
118 :
119 6 : CHECK(FastFixedDtoa(0.000001, 10, buffer, &length, &point));
120 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
121 6 : CHECK_EQ(-5, point);
122 :
123 6 : CHECK(FastFixedDtoa(0.0000001, 10, buffer, &length, &point));
124 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
125 6 : CHECK_EQ(-6, point);
126 :
127 6 : CHECK(FastFixedDtoa(0.00000001, 10, buffer, &length, &point));
128 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
129 6 : CHECK_EQ(-7, point);
130 :
131 6 : CHECK(FastFixedDtoa(0.000000001, 10, buffer, &length, &point));
132 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
133 6 : CHECK_EQ(-8, point);
134 :
135 6 : CHECK(FastFixedDtoa(0.0000000001, 15, buffer, &length, &point));
136 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
137 6 : CHECK_EQ(-9, point);
138 :
139 6 : CHECK(FastFixedDtoa(0.00000000001, 15, buffer, &length, &point));
140 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
141 6 : CHECK_EQ(-10, point);
142 :
143 6 : CHECK(FastFixedDtoa(0.000000000001, 15, buffer, &length, &point));
144 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
145 6 : CHECK_EQ(-11, point);
146 :
147 6 : CHECK(FastFixedDtoa(0.0000000000001, 15, buffer, &length, &point));
148 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
149 6 : CHECK_EQ(-12, point);
150 :
151 6 : CHECK(FastFixedDtoa(0.00000000000001, 15, buffer, &length, &point));
152 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
153 6 : CHECK_EQ(-13, point);
154 :
155 6 : CHECK(FastFixedDtoa(0.000000000000001, 20, buffer, &length, &point));
156 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
157 6 : CHECK_EQ(-14, point);
158 :
159 6 : CHECK(FastFixedDtoa(0.0000000000000001, 20, buffer, &length, &point));
160 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
161 6 : CHECK_EQ(-15, point);
162 :
163 6 : CHECK(FastFixedDtoa(0.00000000000000001, 20, buffer, &length, &point));
164 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
165 6 : CHECK_EQ(-16, point);
166 :
167 6 : CHECK(FastFixedDtoa(0.000000000000000001, 20, buffer, &length, &point));
168 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
169 6 : CHECK_EQ(-17, point);
170 :
171 6 : CHECK(FastFixedDtoa(0.0000000000000000001, 20, buffer, &length, &point));
172 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
173 6 : CHECK_EQ(-18, point);
174 :
175 6 : CHECK(FastFixedDtoa(0.00000000000000000001, 20, buffer, &length, &point));
176 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
177 6 : CHECK_EQ(-19, point);
178 :
179 6 : CHECK(FastFixedDtoa(0.10000000004, 10, buffer, &length, &point));
180 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
181 6 : CHECK_EQ(0, point);
182 :
183 6 : CHECK(FastFixedDtoa(0.01000000004, 10, buffer, &length, &point));
184 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
185 6 : CHECK_EQ(-1, point);
186 :
187 6 : CHECK(FastFixedDtoa(0.00100000004, 10, buffer, &length, &point));
188 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
189 6 : CHECK_EQ(-2, point);
190 :
191 6 : CHECK(FastFixedDtoa(0.00010000004, 10, buffer, &length, &point));
192 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
193 6 : CHECK_EQ(-3, point);
194 :
195 6 : CHECK(FastFixedDtoa(0.00001000004, 10, buffer, &length, &point));
196 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
197 6 : CHECK_EQ(-4, point);
198 :
199 6 : CHECK(FastFixedDtoa(0.00000100004, 10, buffer, &length, &point));
200 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
201 6 : CHECK_EQ(-5, point);
202 :
203 6 : CHECK(FastFixedDtoa(0.00000010004, 10, buffer, &length, &point));
204 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
205 6 : CHECK_EQ(-6, point);
206 :
207 6 : CHECK(FastFixedDtoa(0.00000001004, 10, buffer, &length, &point));
208 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
209 6 : CHECK_EQ(-7, point);
210 :
211 6 : CHECK(FastFixedDtoa(0.00000000104, 10, buffer, &length, &point));
212 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
213 6 : CHECK_EQ(-8, point);
214 :
215 6 : CHECK(FastFixedDtoa(0.0000000001000004, 15, buffer, &length, &point));
216 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
217 6 : CHECK_EQ(-9, point);
218 :
219 6 : CHECK(FastFixedDtoa(0.0000000000100004, 15, buffer, &length, &point));
220 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
221 6 : CHECK_EQ(-10, point);
222 :
223 6 : CHECK(FastFixedDtoa(0.0000000000010004, 15, buffer, &length, &point));
224 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
225 6 : CHECK_EQ(-11, point);
226 :
227 6 : CHECK(FastFixedDtoa(0.0000000000001004, 15, buffer, &length, &point));
228 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
229 6 : CHECK_EQ(-12, point);
230 :
231 6 : CHECK(FastFixedDtoa(0.0000000000000104, 15, buffer, &length, &point));
232 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
233 6 : CHECK_EQ(-13, point);
234 :
235 6 : CHECK(FastFixedDtoa(0.000000000000001000004, 20, buffer, &length, &point));
236 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
237 6 : CHECK_EQ(-14, point);
238 :
239 6 : CHECK(FastFixedDtoa(0.000000000000000100004, 20, buffer, &length, &point));
240 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
241 6 : CHECK_EQ(-15, point);
242 :
243 6 : CHECK(FastFixedDtoa(0.000000000000000010004, 20, buffer, &length, &point));
244 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
245 6 : CHECK_EQ(-16, point);
246 :
247 6 : CHECK(FastFixedDtoa(0.000000000000000001004, 20, buffer, &length, &point));
248 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
249 6 : CHECK_EQ(-17, point);
250 :
251 6 : CHECK(FastFixedDtoa(0.000000000000000000104, 20, buffer, &length, &point));
252 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
253 6 : CHECK_EQ(-18, point);
254 :
255 6 : CHECK(FastFixedDtoa(0.000000000000000000014, 20, buffer, &length, &point));
256 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
257 6 : CHECK_EQ(-19, point);
258 :
259 6 : CHECK(FastFixedDtoa(0.10000000006, 10, buffer, &length, &point));
260 6 : CHECK_EQ(0, strcmp("1000000001", buffer.start()));
261 6 : CHECK_EQ(0, point);
262 :
263 6 : CHECK(FastFixedDtoa(0.01000000006, 10, buffer, &length, &point));
264 6 : CHECK_EQ(0, strcmp("100000001", buffer.start()));
265 6 : CHECK_EQ(-1, point);
266 :
267 6 : CHECK(FastFixedDtoa(0.00100000006, 10, buffer, &length, &point));
268 6 : CHECK_EQ(0, strcmp("10000001", buffer.start()));
269 6 : CHECK_EQ(-2, point);
270 :
271 6 : CHECK(FastFixedDtoa(0.00010000006, 10, buffer, &length, &point));
272 6 : CHECK_EQ(0, strcmp("1000001", buffer.start()));
273 6 : CHECK_EQ(-3, point);
274 :
275 6 : CHECK(FastFixedDtoa(0.00001000006, 10, buffer, &length, &point));
276 6 : CHECK_EQ(0, strcmp("100001", buffer.start()));
277 6 : CHECK_EQ(-4, point);
278 :
279 6 : CHECK(FastFixedDtoa(0.00000100006, 10, buffer, &length, &point));
280 6 : CHECK_EQ(0, strcmp("10001", buffer.start()));
281 6 : CHECK_EQ(-5, point);
282 :
283 6 : CHECK(FastFixedDtoa(0.00000010006, 10, buffer, &length, &point));
284 6 : CHECK_EQ(0, strcmp("1001", buffer.start()));
285 6 : CHECK_EQ(-6, point);
286 :
287 6 : CHECK(FastFixedDtoa(0.00000001006, 10, buffer, &length, &point));
288 6 : CHECK_EQ(0, strcmp("101", buffer.start()));
289 6 : CHECK_EQ(-7, point);
290 :
291 6 : CHECK(FastFixedDtoa(0.00000000106, 10, buffer, &length, &point));
292 6 : CHECK_EQ(0, strcmp("11", buffer.start()));
293 6 : CHECK_EQ(-8, point);
294 :
295 6 : CHECK(FastFixedDtoa(0.0000000001000006, 15, buffer, &length, &point));
296 6 : CHECK_EQ(0, strcmp("100001", buffer.start()));
297 6 : CHECK_EQ(-9, point);
298 :
299 6 : CHECK(FastFixedDtoa(0.0000000000100006, 15, buffer, &length, &point));
300 6 : CHECK_EQ(0, strcmp("10001", buffer.start()));
301 6 : CHECK_EQ(-10, point);
302 :
303 6 : CHECK(FastFixedDtoa(0.0000000000010006, 15, buffer, &length, &point));
304 6 : CHECK_EQ(0, strcmp("1001", buffer.start()));
305 6 : CHECK_EQ(-11, point);
306 :
307 6 : CHECK(FastFixedDtoa(0.0000000000001006, 15, buffer, &length, &point));
308 6 : CHECK_EQ(0, strcmp("101", buffer.start()));
309 6 : CHECK_EQ(-12, point);
310 :
311 6 : CHECK(FastFixedDtoa(0.0000000000000106, 15, buffer, &length, &point));
312 6 : CHECK_EQ(0, strcmp("11", buffer.start()));
313 6 : CHECK_EQ(-13, point);
314 :
315 6 : CHECK(FastFixedDtoa(0.000000000000001000006, 20, buffer, &length, &point));
316 6 : CHECK_EQ(0, strcmp("100001", buffer.start()));
317 6 : CHECK_EQ(-14, point);
318 :
319 6 : CHECK(FastFixedDtoa(0.000000000000000100006, 20, buffer, &length, &point));
320 6 : CHECK_EQ(0, strcmp("10001", buffer.start()));
321 6 : CHECK_EQ(-15, point);
322 :
323 6 : CHECK(FastFixedDtoa(0.000000000000000010006, 20, buffer, &length, &point));
324 6 : CHECK_EQ(0, strcmp("1001", buffer.start()));
325 6 : CHECK_EQ(-16, point);
326 :
327 6 : CHECK(FastFixedDtoa(0.000000000000000001006, 20, buffer, &length, &point));
328 6 : CHECK_EQ(0, strcmp("101", buffer.start()));
329 6 : CHECK_EQ(-17, point);
330 :
331 6 : CHECK(FastFixedDtoa(0.000000000000000000106, 20, buffer, &length, &point));
332 6 : CHECK_EQ(0, strcmp("11", buffer.start()));
333 6 : CHECK_EQ(-18, point);
334 :
335 6 : CHECK(FastFixedDtoa(0.000000000000000000016, 20, buffer, &length, &point));
336 6 : CHECK_EQ(0, strcmp("2", buffer.start()));
337 6 : CHECK_EQ(-19, point);
338 :
339 6 : CHECK(FastFixedDtoa(0.6, 0, buffer, &length, &point));
340 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
341 6 : CHECK_EQ(1, point);
342 :
343 6 : CHECK(FastFixedDtoa(0.96, 1, buffer, &length, &point));
344 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
345 6 : CHECK_EQ(1, point);
346 :
347 6 : CHECK(FastFixedDtoa(0.996, 2, buffer, &length, &point));
348 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
349 6 : CHECK_EQ(1, point);
350 :
351 6 : CHECK(FastFixedDtoa(0.9996, 3, buffer, &length, &point));
352 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
353 6 : CHECK_EQ(1, point);
354 :
355 6 : CHECK(FastFixedDtoa(0.99996, 4, buffer, &length, &point));
356 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
357 6 : CHECK_EQ(1, point);
358 :
359 6 : CHECK(FastFixedDtoa(0.999996, 5, buffer, &length, &point));
360 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
361 6 : CHECK_EQ(1, point);
362 :
363 6 : CHECK(FastFixedDtoa(0.9999996, 6, buffer, &length, &point));
364 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
365 6 : CHECK_EQ(1, point);
366 :
367 6 : CHECK(FastFixedDtoa(0.99999996, 7, buffer, &length, &point));
368 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
369 6 : CHECK_EQ(1, point);
370 :
371 6 : CHECK(FastFixedDtoa(0.999999996, 8, buffer, &length, &point));
372 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
373 6 : CHECK_EQ(1, point);
374 :
375 6 : CHECK(FastFixedDtoa(0.9999999996, 9, buffer, &length, &point));
376 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
377 6 : CHECK_EQ(1, point);
378 :
379 6 : CHECK(FastFixedDtoa(0.99999999996, 10, buffer, &length, &point));
380 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
381 6 : CHECK_EQ(1, point);
382 :
383 6 : CHECK(FastFixedDtoa(0.999999999996, 11, buffer, &length, &point));
384 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
385 6 : CHECK_EQ(1, point);
386 :
387 6 : CHECK(FastFixedDtoa(0.9999999999996, 12, buffer, &length, &point));
388 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
389 6 : CHECK_EQ(1, point);
390 :
391 6 : CHECK(FastFixedDtoa(0.99999999999996, 13, buffer, &length, &point));
392 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
393 6 : CHECK_EQ(1, point);
394 :
395 6 : CHECK(FastFixedDtoa(0.999999999999996, 14, buffer, &length, &point));
396 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
397 6 : CHECK_EQ(1, point);
398 :
399 6 : CHECK(FastFixedDtoa(0.9999999999999996, 15, buffer, &length, &point));
400 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
401 6 : CHECK_EQ(1, point);
402 :
403 6 : CHECK(FastFixedDtoa(0.00999999999999996, 16, buffer, &length, &point));
404 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
405 6 : CHECK_EQ(-1, point);
406 :
407 6 : CHECK(FastFixedDtoa(0.000999999999999996, 17, buffer, &length, &point));
408 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
409 6 : CHECK_EQ(-2, point);
410 :
411 6 : CHECK(FastFixedDtoa(0.0000999999999999996, 18, buffer, &length, &point));
412 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
413 6 : CHECK_EQ(-3, point);
414 :
415 6 : CHECK(FastFixedDtoa(0.00000999999999999996, 19, buffer, &length, &point));
416 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
417 6 : CHECK_EQ(-4, point);
418 :
419 6 : CHECK(FastFixedDtoa(0.000000999999999999996, 20, buffer, &length, &point));
420 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
421 6 : CHECK_EQ(-5, point);
422 :
423 6 : CHECK(FastFixedDtoa(323423.234234, 10, buffer, &length, &point));
424 6 : CHECK_EQ(0, strcmp("323423234234", buffer.start()));
425 6 : CHECK_EQ(6, point);
426 :
427 6 : CHECK(FastFixedDtoa(12345678.901234, 4, buffer, &length, &point));
428 6 : CHECK_EQ(0, strcmp("123456789012", buffer.start()));
429 6 : CHECK_EQ(8, point);
430 :
431 6 : CHECK(FastFixedDtoa(98765.432109, 5, buffer, &length, &point));
432 6 : CHECK_EQ(0, strcmp("9876543211", buffer.start()));
433 6 : CHECK_EQ(5, point);
434 :
435 6 : CHECK(FastFixedDtoa(42, 20, buffer, &length, &point));
436 6 : CHECK_EQ(0, strcmp("42", buffer.start()));
437 6 : CHECK_EQ(2, point);
438 :
439 6 : CHECK(FastFixedDtoa(0.5, 0, buffer, &length, &point));
440 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
441 6 : CHECK_EQ(1, point);
442 :
443 6 : CHECK(FastFixedDtoa(1e-23, 10, buffer, &length, &point));
444 6 : CHECK_EQ(0, strcmp("", buffer.start()));
445 6 : CHECK_EQ(-10, point);
446 :
447 6 : CHECK(FastFixedDtoa(1e-123, 2, buffer, &length, &point));
448 6 : CHECK_EQ(0, strcmp("", buffer.start()));
449 6 : CHECK_EQ(-2, point);
450 :
451 6 : CHECK(FastFixedDtoa(1e-123, 0, buffer, &length, &point));
452 6 : CHECK_EQ(0, strcmp("", buffer.start()));
453 6 : CHECK_EQ(0, point);
454 :
455 6 : CHECK(FastFixedDtoa(1e-23, 20, buffer, &length, &point));
456 6 : CHECK_EQ(0, strcmp("", buffer.start()));
457 6 : CHECK_EQ(-20, point);
458 :
459 6 : CHECK(FastFixedDtoa(1e-21, 20, buffer, &length, &point));
460 6 : CHECK_EQ(0, strcmp("", buffer.start()));
461 6 : CHECK_EQ(-20, point);
462 :
463 6 : CHECK(FastFixedDtoa(1e-22, 20, buffer, &length, &point));
464 6 : CHECK_EQ(0, strcmp("", buffer.start()));
465 6 : CHECK_EQ(-20, point);
466 :
467 6 : CHECK(FastFixedDtoa(6e-21, 20, buffer, &length, &point));
468 6 : CHECK_EQ(0, strcmp("1", buffer.start()));
469 6 : CHECK_EQ(-19, point);
470 :
471 6 : CHECK(FastFixedDtoa(9.1193616301674545152000000e+19, 0,
472 : buffer, &length, &point));
473 6 : CHECK_EQ(0, strcmp("91193616301674545152", buffer.start()));
474 6 : CHECK_EQ(20, point);
475 :
476 6 : CHECK(FastFixedDtoa(4.8184662102767651659096515e-04, 19,
477 : buffer, &length, &point));
478 6 : CHECK_EQ(0, strcmp("4818466210276765", buffer.start()));
479 6 : CHECK_EQ(-3, point);
480 :
481 6 : CHECK(FastFixedDtoa(1.9023164229540652612705182e-23, 8,
482 : buffer, &length, &point));
483 6 : CHECK_EQ(0, strcmp("", buffer.start()));
484 6 : CHECK_EQ(-8, point);
485 :
486 6 : CHECK(FastFixedDtoa(1000000000000000128.0, 0,
487 : buffer, &length, &point));
488 6 : CHECK_EQ(0, strcmp("1000000000000000128", buffer.start()));
489 6 : CHECK_EQ(19, point);
490 6 : }
491 :
492 :
493 23724 : TEST(FastFixedDtoaGayFixed) {
494 : char buffer_container[kBufferSize];
495 : Vector<char> buffer(buffer_container, kBufferSize);
496 : bool status;
497 : int length;
498 : int point;
499 :
500 : Vector<const PrecomputedFixed> precomputed =
501 6 : PrecomputedFixedRepresentations();
502 1200012 : for (int i = 0; i < precomputed.length(); ++i) {
503 1200000 : const PrecomputedFixed current_test = precomputed[i];
504 : double v = current_test.v;
505 : int number_digits = current_test.number_digits;
506 : status = FastFixedDtoa(v, number_digits,
507 600000 : buffer, &length, &point);
508 600000 : CHECK(status);
509 600000 : CHECK_EQ(current_test.decimal_point, point);
510 600000 : CHECK_GE(number_digits, length - point);
511 600000 : CHECK_EQ(0, strcmp(current_test.representation, buffer.start()));
512 : }
513 6 : }
514 :
515 : } // namespace internal
516 71154 : } // namespace v8
|