OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 | 2 |
3 #include <stdlib.h> | 3 #include <stdlib.h> |
4 | 4 |
5 #include "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #include "platform.h" | 7 #include "platform.h" |
8 #include "cctest.h" | 8 #include "cctest.h" |
9 | 9 |
10 using namespace v8::internal; | 10 using namespace v8::internal; |
11 | 11 |
12 | 12 |
13 TEST(Hex) { | 13 TEST(Hex) { |
14 CHECK_EQ(0.0, StringToDouble("0x0", ALLOW_HEX | ALLOW_OCTALS)); | 14 UnicodeCache uc; |
15 CHECK_EQ(0.0, StringToDouble("0X0", ALLOW_HEX | ALLOW_OCTALS)); | 15 CHECK_EQ(0.0, StringToDouble(&uc, "0x0", ALLOW_HEX | ALLOW_OCTALS)); |
16 CHECK_EQ(1.0, StringToDouble("0x1", ALLOW_HEX | ALLOW_OCTALS)); | 16 CHECK_EQ(0.0, StringToDouble(&uc, "0X0", ALLOW_HEX | ALLOW_OCTALS)); |
17 CHECK_EQ(16.0, StringToDouble("0x10", ALLOW_HEX | ALLOW_OCTALS)); | 17 CHECK_EQ(1.0, StringToDouble(&uc, "0x1", ALLOW_HEX | ALLOW_OCTALS)); |
18 CHECK_EQ(255.0, StringToDouble("0xff", ALLOW_HEX | ALLOW_OCTALS)); | 18 CHECK_EQ(16.0, StringToDouble(&uc, "0x10", ALLOW_HEX | ALLOW_OCTALS)); |
19 CHECK_EQ(175.0, StringToDouble("0xAF", ALLOW_HEX | ALLOW_OCTALS)); | 19 CHECK_EQ(255.0, StringToDouble(&uc, "0xff", ALLOW_HEX | ALLOW_OCTALS)); |
| 20 CHECK_EQ(175.0, StringToDouble(&uc, "0xAF", ALLOW_HEX | ALLOW_OCTALS)); |
20 | 21 |
21 CHECK_EQ(0.0, StringToDouble("0x0", ALLOW_HEX)); | 22 CHECK_EQ(0.0, StringToDouble(&uc, "0x0", ALLOW_HEX)); |
22 CHECK_EQ(0.0, StringToDouble("0X0", ALLOW_HEX)); | 23 CHECK_EQ(0.0, StringToDouble(&uc, "0X0", ALLOW_HEX)); |
23 CHECK_EQ(1.0, StringToDouble("0x1", ALLOW_HEX)); | 24 CHECK_EQ(1.0, StringToDouble(&uc, "0x1", ALLOW_HEX)); |
24 CHECK_EQ(16.0, StringToDouble("0x10", ALLOW_HEX)); | 25 CHECK_EQ(16.0, StringToDouble(&uc, "0x10", ALLOW_HEX)); |
25 CHECK_EQ(255.0, StringToDouble("0xff", ALLOW_HEX)); | 26 CHECK_EQ(255.0, StringToDouble(&uc, "0xff", ALLOW_HEX)); |
26 CHECK_EQ(175.0, StringToDouble("0xAF", ALLOW_HEX)); | 27 CHECK_EQ(175.0, StringToDouble(&uc, "0xAF", ALLOW_HEX)); |
27 } | 28 } |
28 | 29 |
29 | 30 |
30 TEST(Octal) { | 31 TEST(Octal) { |
31 CHECK_EQ(0.0, StringToDouble("0", ALLOW_HEX | ALLOW_OCTALS)); | 32 UnicodeCache uc; |
32 CHECK_EQ(0.0, StringToDouble("00", ALLOW_HEX | ALLOW_OCTALS)); | 33 CHECK_EQ(0.0, StringToDouble(&uc, "0", ALLOW_HEX | ALLOW_OCTALS)); |
33 CHECK_EQ(1.0, StringToDouble("01", ALLOW_HEX | ALLOW_OCTALS)); | 34 CHECK_EQ(0.0, StringToDouble(&uc, "00", ALLOW_HEX | ALLOW_OCTALS)); |
34 CHECK_EQ(7.0, StringToDouble("07", ALLOW_HEX | ALLOW_OCTALS)); | 35 CHECK_EQ(1.0, StringToDouble(&uc, "01", ALLOW_HEX | ALLOW_OCTALS)); |
35 CHECK_EQ(8.0, StringToDouble("010", ALLOW_HEX | ALLOW_OCTALS)); | 36 CHECK_EQ(7.0, StringToDouble(&uc, "07", ALLOW_HEX | ALLOW_OCTALS)); |
36 CHECK_EQ(63.0, StringToDouble("077", ALLOW_HEX | ALLOW_OCTALS)); | 37 CHECK_EQ(8.0, StringToDouble(&uc, "010", ALLOW_HEX | ALLOW_OCTALS)); |
| 38 CHECK_EQ(63.0, StringToDouble(&uc, "077", ALLOW_HEX | ALLOW_OCTALS)); |
37 | 39 |
38 CHECK_EQ(0.0, StringToDouble("0", ALLOW_HEX)); | 40 CHECK_EQ(0.0, StringToDouble(&uc, "0", ALLOW_HEX)); |
39 CHECK_EQ(0.0, StringToDouble("00", ALLOW_HEX)); | 41 CHECK_EQ(0.0, StringToDouble(&uc, "00", ALLOW_HEX)); |
40 CHECK_EQ(1.0, StringToDouble("01", ALLOW_HEX)); | 42 CHECK_EQ(1.0, StringToDouble(&uc, "01", ALLOW_HEX)); |
41 CHECK_EQ(7.0, StringToDouble("07", ALLOW_HEX)); | 43 CHECK_EQ(7.0, StringToDouble(&uc, "07", ALLOW_HEX)); |
42 CHECK_EQ(10.0, StringToDouble("010", ALLOW_HEX)); | 44 CHECK_EQ(10.0, StringToDouble(&uc, "010", ALLOW_HEX)); |
43 CHECK_EQ(77.0, StringToDouble("077", ALLOW_HEX)); | 45 CHECK_EQ(77.0, StringToDouble(&uc, "077", ALLOW_HEX)); |
44 | 46 |
45 const double x = 010000000000; // Power of 2, no rounding errors. | 47 const double x = 010000000000; // Power of 2, no rounding errors. |
46 CHECK_EQ(x * x * x * x * x, StringToDouble("01" "0000000000" "0000000000" | 48 CHECK_EQ(x * x * x * x * x, StringToDouble(&uc, "01" "0000000000" "0000000000" |
47 "0000000000" "0000000000" "0000000000", ALLOW_OCTALS)); | 49 "0000000000" "0000000000" "0000000000", ALLOW_OCTALS)); |
48 } | 50 } |
49 | 51 |
50 | 52 |
51 TEST(MalformedOctal) { | 53 TEST(MalformedOctal) { |
52 CHECK_EQ(8.0, StringToDouble("08", ALLOW_HEX | ALLOW_OCTALS)); | 54 UnicodeCache uc; |
53 CHECK_EQ(81.0, StringToDouble("081", ALLOW_HEX | ALLOW_OCTALS)); | 55 CHECK_EQ(8.0, StringToDouble(&uc, "08", ALLOW_HEX | ALLOW_OCTALS)); |
54 CHECK_EQ(78.0, StringToDouble("078", ALLOW_HEX | ALLOW_OCTALS)); | 56 CHECK_EQ(81.0, StringToDouble(&uc, "081", ALLOW_HEX | ALLOW_OCTALS)); |
| 57 CHECK_EQ(78.0, StringToDouble(&uc, "078", ALLOW_HEX | ALLOW_OCTALS)); |
55 | 58 |
56 CHECK(isnan(StringToDouble("07.7", ALLOW_HEX | ALLOW_OCTALS))); | 59 CHECK(isnan(StringToDouble(&uc, "07.7", ALLOW_HEX | ALLOW_OCTALS))); |
57 CHECK(isnan(StringToDouble("07.8", ALLOW_HEX | ALLOW_OCTALS))); | 60 CHECK(isnan(StringToDouble(&uc, "07.8", ALLOW_HEX | ALLOW_OCTALS))); |
58 CHECK(isnan(StringToDouble("07e8", ALLOW_HEX | ALLOW_OCTALS))); | 61 CHECK(isnan(StringToDouble(&uc, "07e8", ALLOW_HEX | ALLOW_OCTALS))); |
59 CHECK(isnan(StringToDouble("07e7", ALLOW_HEX | ALLOW_OCTALS))); | 62 CHECK(isnan(StringToDouble(&uc, "07e7", ALLOW_HEX | ALLOW_OCTALS))); |
60 | 63 |
61 CHECK_EQ(8.7, StringToDouble("08.7", ALLOW_HEX | ALLOW_OCTALS)); | 64 CHECK_EQ(8.7, StringToDouble(&uc, "08.7", ALLOW_HEX | ALLOW_OCTALS)); |
62 CHECK_EQ(8e7, StringToDouble("08e7", ALLOW_HEX | ALLOW_OCTALS)); | 65 CHECK_EQ(8e7, StringToDouble(&uc, "08e7", ALLOW_HEX | ALLOW_OCTALS)); |
63 | 66 |
64 CHECK_EQ(0.001, StringToDouble("0.001", ALLOW_HEX | ALLOW_OCTALS)); | 67 CHECK_EQ(0.001, StringToDouble(&uc, "0.001", ALLOW_HEX | ALLOW_OCTALS)); |
65 CHECK_EQ(0.713, StringToDouble("0.713", ALLOW_HEX | ALLOW_OCTALS)); | 68 CHECK_EQ(0.713, StringToDouble(&uc, "0.713", ALLOW_HEX | ALLOW_OCTALS)); |
66 | 69 |
67 CHECK_EQ(8.0, StringToDouble("08", ALLOW_HEX)); | 70 CHECK_EQ(8.0, StringToDouble(&uc, "08", ALLOW_HEX)); |
68 CHECK_EQ(81.0, StringToDouble("081", ALLOW_HEX)); | 71 CHECK_EQ(81.0, StringToDouble(&uc, "081", ALLOW_HEX)); |
69 CHECK_EQ(78.0, StringToDouble("078", ALLOW_HEX)); | 72 CHECK_EQ(78.0, StringToDouble(&uc, "078", ALLOW_HEX)); |
70 | 73 |
71 CHECK_EQ(7.7, StringToDouble("07.7", ALLOW_HEX)); | 74 CHECK_EQ(7.7, StringToDouble(&uc, "07.7", ALLOW_HEX)); |
72 CHECK_EQ(7.8, StringToDouble("07.8", ALLOW_HEX)); | 75 CHECK_EQ(7.8, StringToDouble(&uc, "07.8", ALLOW_HEX)); |
73 CHECK_EQ(7e8, StringToDouble("07e8", ALLOW_HEX)); | 76 CHECK_EQ(7e8, StringToDouble(&uc, "07e8", ALLOW_HEX)); |
74 CHECK_EQ(7e7, StringToDouble("07e7", ALLOW_HEX)); | 77 CHECK_EQ(7e7, StringToDouble(&uc, "07e7", ALLOW_HEX)); |
75 | 78 |
76 CHECK_EQ(8.7, StringToDouble("08.7", ALLOW_HEX)); | 79 CHECK_EQ(8.7, StringToDouble(&uc, "08.7", ALLOW_HEX)); |
77 CHECK_EQ(8e7, StringToDouble("08e7", ALLOW_HEX)); | 80 CHECK_EQ(8e7, StringToDouble(&uc, "08e7", ALLOW_HEX)); |
78 | 81 |
79 CHECK_EQ(0.001, StringToDouble("0.001", ALLOW_HEX)); | 82 CHECK_EQ(0.001, StringToDouble(&uc, "0.001", ALLOW_HEX)); |
80 CHECK_EQ(0.713, StringToDouble("0.713", ALLOW_HEX)); | 83 CHECK_EQ(0.713, StringToDouble(&uc, "0.713", ALLOW_HEX)); |
81 } | 84 } |
82 | 85 |
83 | 86 |
84 TEST(TrailingJunk) { | 87 TEST(TrailingJunk) { |
85 CHECK_EQ(8.0, StringToDouble("8q", ALLOW_TRAILING_JUNK)); | 88 UnicodeCache uc; |
86 CHECK_EQ(63.0, StringToDouble("077qqq", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); | 89 CHECK_EQ(8.0, StringToDouble(&uc, "8q", ALLOW_TRAILING_JUNK)); |
87 CHECK_EQ(10.0, StringToDouble("10e", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); | 90 CHECK_EQ(63.0, |
88 CHECK_EQ(10.0, StringToDouble("10e-", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); | 91 StringToDouble(&uc, "077qqq", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); |
| 92 CHECK_EQ(10.0, |
| 93 StringToDouble(&uc, "10e", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); |
| 94 CHECK_EQ(10.0, |
| 95 StringToDouble(&uc, "10e-", ALLOW_OCTALS | ALLOW_TRAILING_JUNK)); |
89 } | 96 } |
90 | 97 |
91 | 98 |
92 TEST(NonStrDecimalLiteral) { | 99 TEST(NonStrDecimalLiteral) { |
93 CHECK(isnan(StringToDouble(" ", NO_FLAGS, OS::nan_value()))); | 100 UnicodeCache uc; |
94 CHECK(isnan(StringToDouble("", NO_FLAGS, OS::nan_value()))); | 101 CHECK(isnan(StringToDouble(&uc, " ", NO_FLAGS, OS::nan_value()))); |
95 CHECK(isnan(StringToDouble(" ", NO_FLAGS, OS::nan_value()))); | 102 CHECK(isnan(StringToDouble(&uc, "", NO_FLAGS, OS::nan_value()))); |
96 CHECK_EQ(0.0, StringToDouble("", NO_FLAGS)); | 103 CHECK(isnan(StringToDouble(&uc, " ", NO_FLAGS, OS::nan_value()))); |
97 CHECK_EQ(0.0, StringToDouble(" ", NO_FLAGS)); | 104 CHECK_EQ(0.0, StringToDouble(&uc, "", NO_FLAGS)); |
| 105 CHECK_EQ(0.0, StringToDouble(&uc, " ", NO_FLAGS)); |
98 } | 106 } |
99 | 107 |
100 TEST(IntegerStrLiteral) { | 108 TEST(IntegerStrLiteral) { |
101 CHECK_EQ(0.0, StringToDouble("0.0", NO_FLAGS)); | 109 UnicodeCache uc; |
102 CHECK_EQ(0.0, StringToDouble("0", NO_FLAGS)); | 110 CHECK_EQ(0.0, StringToDouble(&uc, "0.0", NO_FLAGS)); |
103 CHECK_EQ(0.0, StringToDouble("00", NO_FLAGS)); | 111 CHECK_EQ(0.0, StringToDouble(&uc, "0", NO_FLAGS)); |
104 CHECK_EQ(0.0, StringToDouble("000", NO_FLAGS)); | 112 CHECK_EQ(0.0, StringToDouble(&uc, "00", NO_FLAGS)); |
105 CHECK_EQ(1.0, StringToDouble("1", NO_FLAGS)); | 113 CHECK_EQ(0.0, StringToDouble(&uc, "000", NO_FLAGS)); |
106 CHECK_EQ(-1.0, StringToDouble("-1", NO_FLAGS)); | 114 CHECK_EQ(1.0, StringToDouble(&uc, "1", NO_FLAGS)); |
107 CHECK_EQ(-1.0, StringToDouble(" -1 ", NO_FLAGS)); | 115 CHECK_EQ(-1.0, StringToDouble(&uc, "-1", NO_FLAGS)); |
108 CHECK_EQ(1.0, StringToDouble(" +1 ", NO_FLAGS)); | 116 CHECK_EQ(-1.0, StringToDouble(&uc, " -1 ", NO_FLAGS)); |
109 CHECK(isnan(StringToDouble(" - 1 ", NO_FLAGS))); | 117 CHECK_EQ(1.0, StringToDouble(&uc, " +1 ", NO_FLAGS)); |
110 CHECK(isnan(StringToDouble(" + 1 ", NO_FLAGS))); | 118 CHECK(isnan(StringToDouble(&uc, " - 1 ", NO_FLAGS))); |
| 119 CHECK(isnan(StringToDouble(&uc, " + 1 ", NO_FLAGS))); |
111 | 120 |
112 CHECK_EQ(0.0, StringToDouble("0e0", ALLOW_HEX | ALLOW_OCTALS)); | 121 CHECK_EQ(0.0, StringToDouble(&uc, "0e0", ALLOW_HEX | ALLOW_OCTALS)); |
113 CHECK_EQ(0.0, StringToDouble("0e1", ALLOW_HEX | ALLOW_OCTALS)); | 122 CHECK_EQ(0.0, StringToDouble(&uc, "0e1", ALLOW_HEX | ALLOW_OCTALS)); |
114 CHECK_EQ(0.0, StringToDouble("0e-1", ALLOW_HEX | ALLOW_OCTALS)); | 123 CHECK_EQ(0.0, StringToDouble(&uc, "0e-1", ALLOW_HEX | ALLOW_OCTALS)); |
115 CHECK_EQ(0.0, StringToDouble("0e-100000", ALLOW_HEX | ALLOW_OCTALS)); | 124 CHECK_EQ(0.0, StringToDouble(&uc, "0e-100000", ALLOW_HEX | ALLOW_OCTALS)); |
116 CHECK_EQ(0.0, StringToDouble("0e+100000", ALLOW_HEX | ALLOW_OCTALS)); | 125 CHECK_EQ(0.0, StringToDouble(&uc, "0e+100000", ALLOW_HEX | ALLOW_OCTALS)); |
117 CHECK_EQ(0.0, StringToDouble("0.", ALLOW_HEX | ALLOW_OCTALS)); | 126 CHECK_EQ(0.0, StringToDouble(&uc, "0.", ALLOW_HEX | ALLOW_OCTALS)); |
118 } | 127 } |
119 | 128 |
120 TEST(LongNumberStr) { | 129 TEST(LongNumberStr) { |
121 CHECK_EQ(1e10, StringToDouble("1" "0000000000", NO_FLAGS)); | 130 UnicodeCache uc; |
122 CHECK_EQ(1e20, StringToDouble("1" "0000000000" "0000000000", NO_FLAGS)); | 131 CHECK_EQ(1e10, StringToDouble(&uc, "1" "0000000000", NO_FLAGS)); |
| 132 CHECK_EQ(1e20, StringToDouble(&uc, "1" "0000000000" "0000000000", NO_FLAGS)); |
123 | 133 |
124 CHECK_EQ(1e60, StringToDouble("1" "0000000000" "0000000000" "0000000000" | 134 CHECK_EQ(1e60, StringToDouble(&uc, "1" "0000000000" "0000000000" "0000000000" |
125 "0000000000" "0000000000" "0000000000", NO_FLAGS)); | 135 "0000000000" "0000000000" "0000000000", NO_FLAGS)); |
126 | 136 |
127 CHECK_EQ(1e-2, StringToDouble("." "0" "1", NO_FLAGS)); | 137 CHECK_EQ(1e-2, StringToDouble(&uc, "." "0" "1", NO_FLAGS)); |
128 CHECK_EQ(1e-11, StringToDouble("." "0000000000" "1", NO_FLAGS)); | 138 CHECK_EQ(1e-11, StringToDouble(&uc, "." "0000000000" "1", NO_FLAGS)); |
129 CHECK_EQ(1e-21, StringToDouble("." "0000000000" "0000000000" "1", NO_FLAGS)); | 139 CHECK_EQ(1e-21, StringToDouble(&uc, "." "0000000000" "0000000000" "1", |
| 140 NO_FLAGS)); |
130 | 141 |
131 CHECK_EQ(1e-61, StringToDouble("." "0000000000" "0000000000" "0000000000" | 142 CHECK_EQ(1e-61, StringToDouble(&uc, "." "0000000000" "0000000000" "0000000000" |
132 "0000000000" "0000000000" "0000000000" "1", NO_FLAGS)); | 143 "0000000000" "0000000000" "0000000000" "1", NO_FLAGS)); |
133 | 144 |
134 | 145 |
135 // x = 24414062505131248.0 and y = 24414062505131252.0 are representable in | 146 // x = 24414062505131248.0 and y = 24414062505131252.0 are representable in |
136 // double. Check chat z = (x + y) / 2 is rounded to x... | 147 // double. Check chat z = (x + y) / 2 is rounded to x... |
137 CHECK_EQ(24414062505131248.0, | 148 CHECK_EQ(24414062505131248.0, |
138 StringToDouble("24414062505131250.0", NO_FLAGS)); | 149 StringToDouble(&uc, "24414062505131250.0", NO_FLAGS)); |
139 | 150 |
140 // ... and z = (x + y) / 2 + delta is rounded to y. | 151 // ... and z = (x + y) / 2 + delta is rounded to y. |
141 CHECK_EQ(24414062505131252.0, | 152 CHECK_EQ(24414062505131252.0, |
142 StringToDouble("24414062505131250.000000001", NO_FLAGS)); | 153 StringToDouble(&uc, "24414062505131250.000000001", NO_FLAGS)); |
143 } | 154 } |
144 | 155 |
145 | 156 |
146 TEST(MaximumSignificantDigits) { | 157 TEST(MaximumSignificantDigits) { |
| 158 UnicodeCache uc; |
147 char num[] = | 159 char num[] = |
148 "4.4501477170144020250819966727949918635852426585926051135169509" | 160 "4.4501477170144020250819966727949918635852426585926051135169509" |
149 "122872622312493126406953054127118942431783801370080830523154578" | 161 "122872622312493126406953054127118942431783801370080830523154578" |
150 "251545303238277269592368457430440993619708911874715081505094180" | 162 "251545303238277269592368457430440993619708911874715081505094180" |
151 "604803751173783204118519353387964161152051487413083163272520124" | 163 "604803751173783204118519353387964161152051487413083163272520124" |
152 "606023105869053620631175265621765214646643181420505164043632222" | 164 "606023105869053620631175265621765214646643181420505164043632222" |
153 "668006474326056011713528291579642227455489682133472873831754840" | 165 "668006474326056011713528291579642227455489682133472873831754840" |
154 "341397809846934151055619529382191981473003234105366170879223151" | 166 "341397809846934151055619529382191981473003234105366170879223151" |
155 "087335413188049110555339027884856781219017754500629806224571029" | 167 "087335413188049110555339027884856781219017754500629806224571029" |
156 "581637117459456877330110324211689177656713705497387108207822477" | 168 "581637117459456877330110324211689177656713705497387108207822477" |
157 "584250967061891687062782163335299376138075114200886249979505279" | 169 "584250967061891687062782163335299376138075114200886249979505279" |
158 "101870966346394401564490729731565935244123171539810221213221201" | 170 "101870966346394401564490729731565935244123171539810221213221201" |
159 "847003580761626016356864581135848683152156368691976240370422601" | 171 "847003580761626016356864581135848683152156368691976240370422601" |
160 "6998291015625000000000000000000000000000000000e-308"; | 172 "6998291015625000000000000000000000000000000000e-308"; |
161 | 173 |
162 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(num, NO_FLAGS)); | 174 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(&uc, num, NO_FLAGS)); |
163 | 175 |
164 // Changes the result of strtod (at least in glibc implementation). | 176 // Changes the result of strtod (at least in glibc implementation). |
165 num[sizeof(num) - 8] = '1'; | 177 num[sizeof(num) - 8] = '1'; |
166 | 178 |
167 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(num, NO_FLAGS)); | 179 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(&uc, num, NO_FLAGS)); |
168 } | 180 } |
169 | 181 |
170 TEST(MinimumExponent) { | 182 TEST(MinimumExponent) { |
| 183 UnicodeCache uc; |
171 // Same test but with different point-position. | 184 // Same test but with different point-position. |
172 char num[] = | 185 char num[] = |
173 "445014771701440202508199667279499186358524265859260511351695091" | 186 "445014771701440202508199667279499186358524265859260511351695091" |
174 "228726223124931264069530541271189424317838013700808305231545782" | 187 "228726223124931264069530541271189424317838013700808305231545782" |
175 "515453032382772695923684574304409936197089118747150815050941806" | 188 "515453032382772695923684574304409936197089118747150815050941806" |
176 "048037511737832041185193533879641611520514874130831632725201246" | 189 "048037511737832041185193533879641611520514874130831632725201246" |
177 "060231058690536206311752656217652146466431814205051640436322226" | 190 "060231058690536206311752656217652146466431814205051640436322226" |
178 "680064743260560117135282915796422274554896821334728738317548403" | 191 "680064743260560117135282915796422274554896821334728738317548403" |
179 "413978098469341510556195293821919814730032341053661708792231510" | 192 "413978098469341510556195293821919814730032341053661708792231510" |
180 "873354131880491105553390278848567812190177545006298062245710295" | 193 "873354131880491105553390278848567812190177545006298062245710295" |
181 "816371174594568773301103242116891776567137054973871082078224775" | 194 "816371174594568773301103242116891776567137054973871082078224775" |
182 "842509670618916870627821633352993761380751142008862499795052791" | 195 "842509670618916870627821633352993761380751142008862499795052791" |
183 "018709663463944015644907297315659352441231715398102212132212018" | 196 "018709663463944015644907297315659352441231715398102212132212018" |
184 "470035807616260163568645811358486831521563686919762403704226016" | 197 "470035807616260163568645811358486831521563686919762403704226016" |
185 "998291015625000000000000000000000000000000000e-1108"; | 198 "998291015625000000000000000000000000000000000e-1108"; |
186 | 199 |
187 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(num, NO_FLAGS)); | 200 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(&uc, num, NO_FLAGS)); |
188 | 201 |
189 // Changes the result of strtod (at least in glibc implementation). | 202 // Changes the result of strtod (at least in glibc implementation). |
190 num[sizeof(num) - 8] = '1'; | 203 num[sizeof(num) - 8] = '1'; |
191 | 204 |
192 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(num, NO_FLAGS)); | 205 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(&uc, num, NO_FLAGS)); |
193 } | 206 } |
194 | 207 |
195 | 208 |
196 TEST(MaximumExponent) { | 209 TEST(MaximumExponent) { |
| 210 UnicodeCache uc; |
197 char num[] = "0.16e309"; | 211 char num[] = "0.16e309"; |
198 | 212 |
199 CHECK_EQ(1.59999999999999997765e+308, StringToDouble(num, NO_FLAGS)); | 213 CHECK_EQ(1.59999999999999997765e+308, StringToDouble(&uc, num, NO_FLAGS)); |
200 } | 214 } |
201 | 215 |
202 | 216 |
203 TEST(ExponentNumberStr) { | 217 TEST(ExponentNumberStr) { |
204 CHECK_EQ(1e1, StringToDouble("1e1", NO_FLAGS)); | 218 UnicodeCache uc; |
205 CHECK_EQ(1e1, StringToDouble("1e+1", NO_FLAGS)); | 219 CHECK_EQ(1e1, StringToDouble(&uc, "1e1", NO_FLAGS)); |
206 CHECK_EQ(1e-1, StringToDouble("1e-1", NO_FLAGS)); | 220 CHECK_EQ(1e1, StringToDouble(&uc, "1e+1", NO_FLAGS)); |
207 CHECK_EQ(1e100, StringToDouble("1e+100", NO_FLAGS)); | 221 CHECK_EQ(1e-1, StringToDouble(&uc, "1e-1", NO_FLAGS)); |
208 CHECK_EQ(1e-100, StringToDouble("1e-100", NO_FLAGS)); | 222 CHECK_EQ(1e100, StringToDouble(&uc, "1e+100", NO_FLAGS)); |
209 CHECK_EQ(1e-106, StringToDouble(".000001e-100", NO_FLAGS)); | 223 CHECK_EQ(1e-100, StringToDouble(&uc, "1e-100", NO_FLAGS)); |
| 224 CHECK_EQ(1e-106, StringToDouble(&uc, ".000001e-100", NO_FLAGS)); |
210 } | 225 } |
211 | 226 |
212 class OneBit1: public BitField<uint32_t, 0, 1> {}; | 227 class OneBit1: public BitField<uint32_t, 0, 1> {}; |
213 class OneBit2: public BitField<uint32_t, 7, 1> {}; | 228 class OneBit2: public BitField<uint32_t, 7, 1> {}; |
214 class EightBit1: public BitField<uint32_t, 0, 8> {}; | 229 class EightBit1: public BitField<uint32_t, 0, 8> {}; |
215 class EightBit2: public BitField<uint32_t, 13, 8> {}; | 230 class EightBit2: public BitField<uint32_t, 13, 8> {}; |
216 | 231 |
217 TEST(BitField) { | 232 TEST(BitField) { |
218 uint32_t x; | 233 uint32_t x; |
219 | 234 |
(...skipping 19 matching lines...) Expand all Loading... |
239 CHECK(EightBit1::is_valid(i)); | 254 CHECK(EightBit1::is_valid(i)); |
240 x = EightBit1::encode(i); | 255 x = EightBit1::encode(i); |
241 CHECK_EQ(i, EightBit1::decode(x)); | 256 CHECK_EQ(i, EightBit1::decode(x)); |
242 CHECK(EightBit2::is_valid(i)); | 257 CHECK(EightBit2::is_valid(i)); |
243 x = EightBit2::encode(i); | 258 x = EightBit2::encode(i); |
244 CHECK_EQ(i, EightBit2::decode(x)); | 259 CHECK_EQ(i, EightBit2::decode(x)); |
245 } | 260 } |
246 CHECK(!EightBit1::is_valid(256)); | 261 CHECK(!EightBit1::is_valid(256)); |
247 CHECK(!EightBit2::is_valid(256)); | 262 CHECK(!EightBit2::is_valid(256)); |
248 } | 263 } |
OLD | NEW |