Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: test/cctest/test-diy_fp.cc

Issue 619005: Fast algorithm for double->string conversion. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2
3 #include <stdlib.h>
4
5 #include "v8.h"
6
7 #include "platform.h"
8 #include "cctest.h"
9 #include "diy_fp.h"
10
11 using namespace v8::internal;
12
13
14 TEST(Subtract) {
15 DiyFp diy_fp1 = DiyFp(3, 0);
16 DiyFp diy_fp2 = DiyFp(1, 0);
17 DiyFp diff = DiyFp::Minus(diy_fp1, diy_fp2);
18 uint64_t correct_f;
19
20 correct_f = 2;
21 CHECK_EQ(correct_f, diff.f());
22 CHECK_EQ(0, diff.e());
23 diy_fp1.Subtract(diy_fp2);
24 correct_f = 2;
25 CHECK_EQ(correct_f, diy_fp1.f());
26 CHECK_EQ(0, diy_fp1.e());
27 }
28
29
30 TEST(Multiply) {
31 uint64_t correct_f;
32
33 DiyFp diy_fp1 = DiyFp(3, 0);
34 DiyFp diy_fp2 = DiyFp(2, 0);
35 DiyFp product = DiyFp::Times(diy_fp1, diy_fp2);
36 correct_f = 0;
37 CHECK_EQ(correct_f, product.f());
38 CHECK_EQ(64, product.e());
39 diy_fp1.Multiply(diy_fp2);
40 correct_f = 0;
41 CHECK_EQ(correct_f, diy_fp1.f());
42 CHECK_EQ(64, diy_fp1.e());
43
44 diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x80000000,00000000), 11);
45 diy_fp2 = DiyFp(2, 13);
46 product = DiyFp::Times(diy_fp1, diy_fp2);
47 correct_f = 1;
48 CHECK_EQ(correct_f, product.f());
49 CHECK_EQ(11 + 13 + 64, product.e());
50
51 // Test rounding.
52 diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x80000000,00000001), 11);
53 diy_fp2 = DiyFp(1, 13);
54 product = DiyFp::Times(diy_fp1, diy_fp2);
55 correct_f = 1;
56 CHECK_EQ(correct_f, product.f());
57 CHECK_EQ(11 + 13 + 64, product.e());
58
59 diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x7fffffff,ffffffff), 11);
60 diy_fp2 = DiyFp(1, 13);
61 product = DiyFp::Times(diy_fp1, diy_fp2);
62 correct_f = 0;
63 CHECK_EQ(correct_f, product.f());
64 CHECK_EQ(11 + 13 + 64, product.e());
65
66 // Halfway cases are allowed to round either way. So don't check for it.
67
68 // Big numbers.
69 diy_fp1 = DiyFp(V8_2PART_UINT64_C(0xFFFFFFFF,FFFFFFFF), 11);
70 diy_fp2 = DiyFp(V8_2PART_UINT64_C(0xFFFFFFFF,FFFFFFFF), 13);
71 // 128bit result: 0xfffffffffffffffe0000000000000001
72 product = DiyFp::Times(diy_fp1, diy_fp2);
73 correct_f = V8_2PART_UINT64_C(0xFFFFFFFF,FFFFFFFe);
74 CHECK_EQ(correct_f, product.f());
75 CHECK_EQ(11 + 13 + 64, product.e());
76
77 }
OLDNEW
« src/powers_ten.h ('K') | « test/cctest/SConscript ('k') | test/cctest/test-double.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698