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 26644 : TEST(FastFixedVariousDoubles) {
44 : char buffer_container[kBufferSize];
45 : Vector<char> buffer(buffer_container, kBufferSize);
46 : int length;
47 : int point;
48 :
49 5 : CHECK(FastFixedDtoa(1.0, 1, buffer, &length, &point));
50 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
51 5 : CHECK_EQ(1, point);
52 :
53 5 : CHECK(FastFixedDtoa(1.0, 15, buffer, &length, &point));
54 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
55 5 : CHECK_EQ(1, point);
56 :
57 5 : CHECK(FastFixedDtoa(1.0, 0, buffer, &length, &point));
58 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
59 5 : CHECK_EQ(1, point);
60 :
61 5 : CHECK(FastFixedDtoa(0xFFFFFFFF, 5, buffer, &length, &point));
62 5 : CHECK_EQ(0, strcmp("4294967295", buffer.start()));
63 5 : CHECK_EQ(10, point);
64 :
65 5 : CHECK(FastFixedDtoa(4294967296.0, 5, buffer, &length, &point));
66 5 : CHECK_EQ(0, strcmp("4294967296", buffer.start()));
67 5 : CHECK_EQ(10, point);
68 :
69 5 : CHECK(FastFixedDtoa(1e21, 5, buffer, &length, &point));
70 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
71 : // CHECK_EQ(22, point);
72 5 : CHECK_EQ(22, point);
73 :
74 5 : CHECK(FastFixedDtoa(999999999999999868928.00, 2, buffer, &length, &point));
75 5 : CHECK_EQ(0, strcmp("999999999999999868928", buffer.start()));
76 5 : CHECK_EQ(21, point);
77 :
78 5 : CHECK(FastFixedDtoa(6.9999999999999989514240000e+21, 5, buffer,
79 : &length, &point));
80 5 : CHECK_EQ(0, strcmp("6999999999999998951424", buffer.start()));
81 5 : CHECK_EQ(22, point);
82 :
83 5 : CHECK(FastFixedDtoa(1.5, 5, buffer, &length, &point));
84 5 : CHECK_EQ(0, strcmp("15", buffer.start()));
85 5 : CHECK_EQ(1, point);
86 :
87 5 : CHECK(FastFixedDtoa(1.55, 5, buffer, &length, &point));
88 5 : CHECK_EQ(0, strcmp("155", buffer.start()));
89 5 : CHECK_EQ(1, point);
90 :
91 5 : CHECK(FastFixedDtoa(1.55, 1, buffer, &length, &point));
92 5 : CHECK_EQ(0, strcmp("16", buffer.start()));
93 5 : CHECK_EQ(1, point);
94 :
95 5 : CHECK(FastFixedDtoa(1.00000001, 15, buffer, &length, &point));
96 5 : CHECK_EQ(0, strcmp("100000001", buffer.start()));
97 5 : CHECK_EQ(1, point);
98 :
99 5 : CHECK(FastFixedDtoa(0.1, 10, buffer, &length, &point));
100 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
101 5 : CHECK_EQ(0, point);
102 :
103 5 : CHECK(FastFixedDtoa(0.01, 10, buffer, &length, &point));
104 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
105 5 : CHECK_EQ(-1, point);
106 :
107 5 : CHECK(FastFixedDtoa(0.001, 10, buffer, &length, &point));
108 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
109 5 : CHECK_EQ(-2, point);
110 :
111 5 : CHECK(FastFixedDtoa(0.0001, 10, buffer, &length, &point));
112 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
113 5 : CHECK_EQ(-3, point);
114 :
115 5 : CHECK(FastFixedDtoa(0.00001, 10, buffer, &length, &point));
116 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
117 5 : CHECK_EQ(-4, point);
118 :
119 5 : CHECK(FastFixedDtoa(0.000001, 10, buffer, &length, &point));
120 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
121 5 : CHECK_EQ(-5, point);
122 :
123 5 : CHECK(FastFixedDtoa(0.0000001, 10, buffer, &length, &point));
124 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
125 5 : CHECK_EQ(-6, point);
126 :
127 5 : CHECK(FastFixedDtoa(0.00000001, 10, buffer, &length, &point));
128 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
129 5 : CHECK_EQ(-7, point);
130 :
131 5 : CHECK(FastFixedDtoa(0.000000001, 10, buffer, &length, &point));
132 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
133 5 : CHECK_EQ(-8, point);
134 :
135 5 : CHECK(FastFixedDtoa(0.0000000001, 15, buffer, &length, &point));
136 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
137 5 : CHECK_EQ(-9, point);
138 :
139 5 : CHECK(FastFixedDtoa(0.00000000001, 15, buffer, &length, &point));
140 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
141 5 : CHECK_EQ(-10, point);
142 :
143 5 : CHECK(FastFixedDtoa(0.000000000001, 15, buffer, &length, &point));
144 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
145 5 : CHECK_EQ(-11, point);
146 :
147 5 : CHECK(FastFixedDtoa(0.0000000000001, 15, buffer, &length, &point));
148 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
149 5 : CHECK_EQ(-12, point);
150 :
151 5 : CHECK(FastFixedDtoa(0.00000000000001, 15, buffer, &length, &point));
152 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
153 5 : CHECK_EQ(-13, point);
154 :
155 5 : CHECK(FastFixedDtoa(0.000000000000001, 20, buffer, &length, &point));
156 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
157 5 : CHECK_EQ(-14, point);
158 :
159 5 : CHECK(FastFixedDtoa(0.0000000000000001, 20, buffer, &length, &point));
160 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
161 5 : CHECK_EQ(-15, point);
162 :
163 5 : CHECK(FastFixedDtoa(0.00000000000000001, 20, buffer, &length, &point));
164 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
165 5 : CHECK_EQ(-16, point);
166 :
167 5 : CHECK(FastFixedDtoa(0.000000000000000001, 20, buffer, &length, &point));
168 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
169 5 : CHECK_EQ(-17, point);
170 :
171 5 : CHECK(FastFixedDtoa(0.0000000000000000001, 20, buffer, &length, &point));
172 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
173 5 : CHECK_EQ(-18, point);
174 :
175 5 : CHECK(FastFixedDtoa(0.00000000000000000001, 20, buffer, &length, &point));
176 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
177 5 : CHECK_EQ(-19, point);
178 :
179 5 : CHECK(FastFixedDtoa(0.10000000004, 10, buffer, &length, &point));
180 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
181 5 : CHECK_EQ(0, point);
182 :
183 5 : CHECK(FastFixedDtoa(0.01000000004, 10, buffer, &length, &point));
184 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
185 5 : CHECK_EQ(-1, point);
186 :
187 5 : CHECK(FastFixedDtoa(0.00100000004, 10, buffer, &length, &point));
188 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
189 5 : CHECK_EQ(-2, point);
190 :
191 5 : CHECK(FastFixedDtoa(0.00010000004, 10, buffer, &length, &point));
192 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
193 5 : CHECK_EQ(-3, point);
194 :
195 5 : CHECK(FastFixedDtoa(0.00001000004, 10, buffer, &length, &point));
196 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
197 5 : CHECK_EQ(-4, point);
198 :
199 5 : CHECK(FastFixedDtoa(0.00000100004, 10, buffer, &length, &point));
200 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
201 5 : CHECK_EQ(-5, point);
202 :
203 5 : CHECK(FastFixedDtoa(0.00000010004, 10, buffer, &length, &point));
204 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
205 5 : CHECK_EQ(-6, point);
206 :
207 5 : CHECK(FastFixedDtoa(0.00000001004, 10, buffer, &length, &point));
208 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
209 5 : CHECK_EQ(-7, point);
210 :
211 5 : CHECK(FastFixedDtoa(0.00000000104, 10, buffer, &length, &point));
212 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
213 5 : CHECK_EQ(-8, point);
214 :
215 5 : CHECK(FastFixedDtoa(0.0000000001000004, 15, buffer, &length, &point));
216 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
217 5 : CHECK_EQ(-9, point);
218 :
219 5 : CHECK(FastFixedDtoa(0.0000000000100004, 15, buffer, &length, &point));
220 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
221 5 : CHECK_EQ(-10, point);
222 :
223 5 : CHECK(FastFixedDtoa(0.0000000000010004, 15, buffer, &length, &point));
224 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
225 5 : CHECK_EQ(-11, point);
226 :
227 5 : CHECK(FastFixedDtoa(0.0000000000001004, 15, buffer, &length, &point));
228 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
229 5 : CHECK_EQ(-12, point);
230 :
231 5 : CHECK(FastFixedDtoa(0.0000000000000104, 15, buffer, &length, &point));
232 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
233 5 : CHECK_EQ(-13, point);
234 :
235 5 : CHECK(FastFixedDtoa(0.000000000000001000004, 20, buffer, &length, &point));
236 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
237 5 : CHECK_EQ(-14, point);
238 :
239 5 : CHECK(FastFixedDtoa(0.000000000000000100004, 20, buffer, &length, &point));
240 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
241 5 : CHECK_EQ(-15, point);
242 :
243 5 : CHECK(FastFixedDtoa(0.000000000000000010004, 20, buffer, &length, &point));
244 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
245 5 : CHECK_EQ(-16, point);
246 :
247 5 : CHECK(FastFixedDtoa(0.000000000000000001004, 20, buffer, &length, &point));
248 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
249 5 : CHECK_EQ(-17, point);
250 :
251 5 : CHECK(FastFixedDtoa(0.000000000000000000104, 20, buffer, &length, &point));
252 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
253 5 : CHECK_EQ(-18, point);
254 :
255 5 : CHECK(FastFixedDtoa(0.000000000000000000014, 20, buffer, &length, &point));
256 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
257 5 : CHECK_EQ(-19, point);
258 :
259 5 : CHECK(FastFixedDtoa(0.10000000006, 10, buffer, &length, &point));
260 5 : CHECK_EQ(0, strcmp("1000000001", buffer.start()));
261 5 : CHECK_EQ(0, point);
262 :
263 5 : CHECK(FastFixedDtoa(0.01000000006, 10, buffer, &length, &point));
264 5 : CHECK_EQ(0, strcmp("100000001", buffer.start()));
265 5 : CHECK_EQ(-1, point);
266 :
267 5 : CHECK(FastFixedDtoa(0.00100000006, 10, buffer, &length, &point));
268 5 : CHECK_EQ(0, strcmp("10000001", buffer.start()));
269 5 : CHECK_EQ(-2, point);
270 :
271 5 : CHECK(FastFixedDtoa(0.00010000006, 10, buffer, &length, &point));
272 5 : CHECK_EQ(0, strcmp("1000001", buffer.start()));
273 5 : CHECK_EQ(-3, point);
274 :
275 5 : CHECK(FastFixedDtoa(0.00001000006, 10, buffer, &length, &point));
276 5 : CHECK_EQ(0, strcmp("100001", buffer.start()));
277 5 : CHECK_EQ(-4, point);
278 :
279 5 : CHECK(FastFixedDtoa(0.00000100006, 10, buffer, &length, &point));
280 5 : CHECK_EQ(0, strcmp("10001", buffer.start()));
281 5 : CHECK_EQ(-5, point);
282 :
283 5 : CHECK(FastFixedDtoa(0.00000010006, 10, buffer, &length, &point));
284 5 : CHECK_EQ(0, strcmp("1001", buffer.start()));
285 5 : CHECK_EQ(-6, point);
286 :
287 5 : CHECK(FastFixedDtoa(0.00000001006, 10, buffer, &length, &point));
288 5 : CHECK_EQ(0, strcmp("101", buffer.start()));
289 5 : CHECK_EQ(-7, point);
290 :
291 5 : CHECK(FastFixedDtoa(0.00000000106, 10, buffer, &length, &point));
292 5 : CHECK_EQ(0, strcmp("11", buffer.start()));
293 5 : CHECK_EQ(-8, point);
294 :
295 5 : CHECK(FastFixedDtoa(0.0000000001000006, 15, buffer, &length, &point));
296 5 : CHECK_EQ(0, strcmp("100001", buffer.start()));
297 5 : CHECK_EQ(-9, point);
298 :
299 5 : CHECK(FastFixedDtoa(0.0000000000100006, 15, buffer, &length, &point));
300 5 : CHECK_EQ(0, strcmp("10001", buffer.start()));
301 5 : CHECK_EQ(-10, point);
302 :
303 5 : CHECK(FastFixedDtoa(0.0000000000010006, 15, buffer, &length, &point));
304 5 : CHECK_EQ(0, strcmp("1001", buffer.start()));
305 5 : CHECK_EQ(-11, point);
306 :
307 5 : CHECK(FastFixedDtoa(0.0000000000001006, 15, buffer, &length, &point));
308 5 : CHECK_EQ(0, strcmp("101", buffer.start()));
309 5 : CHECK_EQ(-12, point);
310 :
311 5 : CHECK(FastFixedDtoa(0.0000000000000106, 15, buffer, &length, &point));
312 5 : CHECK_EQ(0, strcmp("11", buffer.start()));
313 5 : CHECK_EQ(-13, point);
314 :
315 5 : CHECK(FastFixedDtoa(0.000000000000001000006, 20, buffer, &length, &point));
316 5 : CHECK_EQ(0, strcmp("100001", buffer.start()));
317 5 : CHECK_EQ(-14, point);
318 :
319 5 : CHECK(FastFixedDtoa(0.000000000000000100006, 20, buffer, &length, &point));
320 5 : CHECK_EQ(0, strcmp("10001", buffer.start()));
321 5 : CHECK_EQ(-15, point);
322 :
323 5 : CHECK(FastFixedDtoa(0.000000000000000010006, 20, buffer, &length, &point));
324 5 : CHECK_EQ(0, strcmp("1001", buffer.start()));
325 5 : CHECK_EQ(-16, point);
326 :
327 5 : CHECK(FastFixedDtoa(0.000000000000000001006, 20, buffer, &length, &point));
328 5 : CHECK_EQ(0, strcmp("101", buffer.start()));
329 5 : CHECK_EQ(-17, point);
330 :
331 5 : CHECK(FastFixedDtoa(0.000000000000000000106, 20, buffer, &length, &point));
332 5 : CHECK_EQ(0, strcmp("11", buffer.start()));
333 5 : CHECK_EQ(-18, point);
334 :
335 5 : CHECK(FastFixedDtoa(0.000000000000000000016, 20, buffer, &length, &point));
336 5 : CHECK_EQ(0, strcmp("2", buffer.start()));
337 5 : CHECK_EQ(-19, point);
338 :
339 5 : CHECK(FastFixedDtoa(0.6, 0, buffer, &length, &point));
340 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
341 5 : CHECK_EQ(1, point);
342 :
343 5 : CHECK(FastFixedDtoa(0.96, 1, buffer, &length, &point));
344 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
345 5 : CHECK_EQ(1, point);
346 :
347 5 : CHECK(FastFixedDtoa(0.996, 2, buffer, &length, &point));
348 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
349 5 : CHECK_EQ(1, point);
350 :
351 5 : CHECK(FastFixedDtoa(0.9996, 3, buffer, &length, &point));
352 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
353 5 : CHECK_EQ(1, point);
354 :
355 5 : CHECK(FastFixedDtoa(0.99996, 4, buffer, &length, &point));
356 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
357 5 : CHECK_EQ(1, point);
358 :
359 5 : CHECK(FastFixedDtoa(0.999996, 5, buffer, &length, &point));
360 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
361 5 : CHECK_EQ(1, point);
362 :
363 5 : CHECK(FastFixedDtoa(0.9999996, 6, buffer, &length, &point));
364 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
365 5 : CHECK_EQ(1, point);
366 :
367 5 : CHECK(FastFixedDtoa(0.99999996, 7, buffer, &length, &point));
368 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
369 5 : CHECK_EQ(1, point);
370 :
371 5 : CHECK(FastFixedDtoa(0.999999996, 8, buffer, &length, &point));
372 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
373 5 : CHECK_EQ(1, point);
374 :
375 5 : CHECK(FastFixedDtoa(0.9999999996, 9, buffer, &length, &point));
376 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
377 5 : CHECK_EQ(1, point);
378 :
379 5 : CHECK(FastFixedDtoa(0.99999999996, 10, buffer, &length, &point));
380 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
381 5 : CHECK_EQ(1, point);
382 :
383 5 : CHECK(FastFixedDtoa(0.999999999996, 11, buffer, &length, &point));
384 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
385 5 : CHECK_EQ(1, point);
386 :
387 5 : CHECK(FastFixedDtoa(0.9999999999996, 12, buffer, &length, &point));
388 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
389 5 : CHECK_EQ(1, point);
390 :
391 5 : CHECK(FastFixedDtoa(0.99999999999996, 13, buffer, &length, &point));
392 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
393 5 : CHECK_EQ(1, point);
394 :
395 5 : CHECK(FastFixedDtoa(0.999999999999996, 14, buffer, &length, &point));
396 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
397 5 : CHECK_EQ(1, point);
398 :
399 5 : CHECK(FastFixedDtoa(0.9999999999999996, 15, buffer, &length, &point));
400 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
401 5 : CHECK_EQ(1, point);
402 :
403 5 : CHECK(FastFixedDtoa(0.00999999999999996, 16, buffer, &length, &point));
404 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
405 5 : CHECK_EQ(-1, point);
406 :
407 5 : CHECK(FastFixedDtoa(0.000999999999999996, 17, buffer, &length, &point));
408 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
409 5 : CHECK_EQ(-2, point);
410 :
411 5 : CHECK(FastFixedDtoa(0.0000999999999999996, 18, buffer, &length, &point));
412 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
413 5 : CHECK_EQ(-3, point);
414 :
415 5 : CHECK(FastFixedDtoa(0.00000999999999999996, 19, buffer, &length, &point));
416 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
417 5 : CHECK_EQ(-4, point);
418 :
419 5 : CHECK(FastFixedDtoa(0.000000999999999999996, 20, buffer, &length, &point));
420 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
421 5 : CHECK_EQ(-5, point);
422 :
423 5 : CHECK(FastFixedDtoa(323423.234234, 10, buffer, &length, &point));
424 5 : CHECK_EQ(0, strcmp("323423234234", buffer.start()));
425 5 : CHECK_EQ(6, point);
426 :
427 5 : CHECK(FastFixedDtoa(12345678.901234, 4, buffer, &length, &point));
428 5 : CHECK_EQ(0, strcmp("123456789012", buffer.start()));
429 5 : CHECK_EQ(8, point);
430 :
431 5 : CHECK(FastFixedDtoa(98765.432109, 5, buffer, &length, &point));
432 5 : CHECK_EQ(0, strcmp("9876543211", buffer.start()));
433 5 : CHECK_EQ(5, point);
434 :
435 5 : CHECK(FastFixedDtoa(42, 20, buffer, &length, &point));
436 5 : CHECK_EQ(0, strcmp("42", buffer.start()));
437 5 : CHECK_EQ(2, point);
438 :
439 5 : CHECK(FastFixedDtoa(0.5, 0, buffer, &length, &point));
440 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
441 5 : CHECK_EQ(1, point);
442 :
443 5 : CHECK(FastFixedDtoa(1e-23, 10, buffer, &length, &point));
444 5 : CHECK_EQ(0, strcmp("", buffer.start()));
445 5 : CHECK_EQ(-10, point);
446 :
447 5 : CHECK(FastFixedDtoa(1e-123, 2, buffer, &length, &point));
448 5 : CHECK_EQ(0, strcmp("", buffer.start()));
449 5 : CHECK_EQ(-2, point);
450 :
451 5 : CHECK(FastFixedDtoa(1e-123, 0, buffer, &length, &point));
452 5 : CHECK_EQ(0, strcmp("", buffer.start()));
453 5 : CHECK_EQ(0, point);
454 :
455 5 : CHECK(FastFixedDtoa(1e-23, 20, buffer, &length, &point));
456 5 : CHECK_EQ(0, strcmp("", buffer.start()));
457 5 : CHECK_EQ(-20, point);
458 :
459 5 : CHECK(FastFixedDtoa(1e-21, 20, buffer, &length, &point));
460 5 : CHECK_EQ(0, strcmp("", buffer.start()));
461 5 : CHECK_EQ(-20, point);
462 :
463 5 : CHECK(FastFixedDtoa(1e-22, 20, buffer, &length, &point));
464 5 : CHECK_EQ(0, strcmp("", buffer.start()));
465 5 : CHECK_EQ(-20, point);
466 :
467 5 : CHECK(FastFixedDtoa(6e-21, 20, buffer, &length, &point));
468 5 : CHECK_EQ(0, strcmp("1", buffer.start()));
469 5 : CHECK_EQ(-19, point);
470 :
471 5 : CHECK(FastFixedDtoa(9.1193616301674545152000000e+19, 0,
472 : buffer, &length, &point));
473 5 : CHECK_EQ(0, strcmp("91193616301674545152", buffer.start()));
474 5 : CHECK_EQ(20, point);
475 :
476 5 : CHECK(FastFixedDtoa(4.8184662102767651659096515e-04, 19,
477 : buffer, &length, &point));
478 5 : CHECK_EQ(0, strcmp("4818466210276765", buffer.start()));
479 5 : CHECK_EQ(-3, point);
480 :
481 5 : CHECK(FastFixedDtoa(1.9023164229540652612705182e-23, 8,
482 : buffer, &length, &point));
483 5 : CHECK_EQ(0, strcmp("", buffer.start()));
484 5 : CHECK_EQ(-8, point);
485 :
486 5 : CHECK(FastFixedDtoa(1000000000000000128.0, 0,
487 : buffer, &length, &point));
488 5 : CHECK_EQ(0, strcmp("1000000000000000128", buffer.start()));
489 5 : CHECK_EQ(19, point);
490 5 : }
491 :
492 :
493 26644 : 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 5 : PrecomputedFixedRepresentations();
502 1000005 : for (int i = 0; i < precomputed.length(); ++i) {
503 1000000 : 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 500000 : buffer, &length, &point);
508 500000 : CHECK(status);
509 500000 : CHECK_EQ(current_test.decimal_point, point);
510 500000 : CHECK_GE(number_digits, length - point);
511 500000 : CHECK_EQ(0, strcmp(current_test.representation, buffer.start()));
512 : }
513 5 : }
514 :
515 : } // namespace internal
516 79917 : } // namespace v8
|