| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 // double. Check chat z = (x + y) / 2 is rounded to x... | 134 // double. Check chat z = (x + y) / 2 is rounded to x... |
| 135 CHECK_EQ(24414062505131248.0, | 135 CHECK_EQ(24414062505131248.0, |
| 136 StringToDouble("24414062505131250.0", NO_FLAGS)); | 136 StringToDouble("24414062505131250.0", NO_FLAGS)); |
| 137 | 137 |
| 138 // ... and z = (x + y) / 2 + delta is rounded to y. | 138 // ... and z = (x + y) / 2 + delta is rounded to y. |
| 139 CHECK_EQ(24414062505131252.0, | 139 CHECK_EQ(24414062505131252.0, |
| 140 StringToDouble("24414062505131250.000000001", NO_FLAGS)); | 140 StringToDouble("24414062505131250.000000001", NO_FLAGS)); |
| 141 } | 141 } |
| 142 | 142 |
| 143 | 143 |
| 144 extern "C" double gay_strtod(const char* s00, const char** se); | |
| 145 | |
| 146 | |
| 147 TEST(MaximumSignificantDigits) { | 144 TEST(MaximumSignificantDigits) { |
| 148 char num[] = | 145 char num[] = |
| 149 "4.4501477170144020250819966727949918635852426585926051135169509" | 146 "4.4501477170144020250819966727949918635852426585926051135169509" |
| 150 "122872622312493126406953054127118942431783801370080830523154578" | 147 "122872622312493126406953054127118942431783801370080830523154578" |
| 151 "251545303238277269592368457430440993619708911874715081505094180" | 148 "251545303238277269592368457430440993619708911874715081505094180" |
| 152 "604803751173783204118519353387964161152051487413083163272520124" | 149 "604803751173783204118519353387964161152051487413083163272520124" |
| 153 "606023105869053620631175265621765214646643181420505164043632222" | 150 "606023105869053620631175265621765214646643181420505164043632222" |
| 154 "668006474326056011713528291579642227455489682133472873831754840" | 151 "668006474326056011713528291579642227455489682133472873831754840" |
| 155 "341397809846934151055619529382191981473003234105366170879223151" | 152 "341397809846934151055619529382191981473003234105366170879223151" |
| 156 "087335413188049110555339027884856781219017754500629806224571029" | 153 "087335413188049110555339027884856781219017754500629806224571029" |
| 157 "581637117459456877330110324211689177656713705497387108207822477" | 154 "581637117459456877330110324211689177656713705497387108207822477" |
| 158 "584250967061891687062782163335299376138075114200886249979505279" | 155 "584250967061891687062782163335299376138075114200886249979505279" |
| 159 "101870966346394401564490729731565935244123171539810221213221201" | 156 "101870966346394401564490729731565935244123171539810221213221201" |
| 160 "847003580761626016356864581135848683152156368691976240370422601" | 157 "847003580761626016356864581135848683152156368691976240370422601" |
| 161 "6998291015625000000000000000000000000000000000e-308"; | 158 "6998291015625000000000000000000000000000000000e-308"; |
| 162 | 159 |
| 163 CHECK_EQ(gay_strtod(num, NULL), StringToDouble(num, NO_FLAGS)); | 160 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(num, NO_FLAGS)); |
| 164 | 161 |
| 165 // Changes the result of strtod (at least in glibc implementation). | 162 // Changes the result of strtod (at least in glibc implementation). |
| 166 num[sizeof(num) - 8] = '1'; | 163 num[sizeof(num) - 8] = '1'; |
| 167 | 164 |
| 168 CHECK_EQ(gay_strtod(num, NULL), StringToDouble(num, NO_FLAGS)); | 165 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(num, NO_FLAGS)); |
| 169 } | 166 } |
| 170 | 167 |
| 171 TEST(MinimumExponent) { | 168 TEST(MinimumExponent) { |
| 172 // Same test but with different point-position. | 169 // Same test but with different point-position. |
| 173 char num[] = | 170 char num[] = |
| 174 "445014771701440202508199667279499186358524265859260511351695091" | 171 "445014771701440202508199667279499186358524265859260511351695091" |
| 175 "228726223124931264069530541271189424317838013700808305231545782" | 172 "228726223124931264069530541271189424317838013700808305231545782" |
| 176 "515453032382772695923684574304409936197089118747150815050941806" | 173 "515453032382772695923684574304409936197089118747150815050941806" |
| 177 "048037511737832041185193533879641611520514874130831632725201246" | 174 "048037511737832041185193533879641611520514874130831632725201246" |
| 178 "060231058690536206311752656217652146466431814205051640436322226" | 175 "060231058690536206311752656217652146466431814205051640436322226" |
| 179 "680064743260560117135282915796422274554896821334728738317548403" | 176 "680064743260560117135282915796422274554896821334728738317548403" |
| 180 "413978098469341510556195293821919814730032341053661708792231510" | 177 "413978098469341510556195293821919814730032341053661708792231510" |
| 181 "873354131880491105553390278848567812190177545006298062245710295" | 178 "873354131880491105553390278848567812190177545006298062245710295" |
| 182 "816371174594568773301103242116891776567137054973871082078224775" | 179 "816371174594568773301103242116891776567137054973871082078224775" |
| 183 "842509670618916870627821633352993761380751142008862499795052791" | 180 "842509670618916870627821633352993761380751142008862499795052791" |
| 184 "018709663463944015644907297315659352441231715398102212132212018" | 181 "018709663463944015644907297315659352441231715398102212132212018" |
| 185 "470035807616260163568645811358486831521563686919762403704226016" | 182 "470035807616260163568645811358486831521563686919762403704226016" |
| 186 "998291015625000000000000000000000000000000000e-1108"; | 183 "998291015625000000000000000000000000000000000e-1108"; |
| 187 | 184 |
| 188 CHECK_EQ(gay_strtod(num, NULL), StringToDouble(num, NO_FLAGS)); | 185 CHECK_EQ(4.4501477170144017780491e-308, StringToDouble(num, NO_FLAGS)); |
| 189 | 186 |
| 190 // Changes the result of strtod (at least in glibc implementation). | 187 // Changes the result of strtod (at least in glibc implementation). |
| 191 num[sizeof(num) - 8] = '1'; | 188 num[sizeof(num) - 8] = '1'; |
| 192 | 189 |
| 193 CHECK_EQ(gay_strtod(num, NULL), StringToDouble(num, NO_FLAGS)); | 190 CHECK_EQ(4.4501477170144022721148e-308, StringToDouble(num, NO_FLAGS)); |
| 194 } | 191 } |
| 195 | 192 |
| 196 | 193 |
| 197 TEST(MaximumExponent) { | 194 TEST(MaximumExponent) { |
| 198 char num[] = "0.16e309"; | 195 char num[] = "0.16e309"; |
| 199 | 196 |
| 200 CHECK_EQ(gay_strtod(num, NULL), StringToDouble(num, NO_FLAGS)); | 197 CHECK_EQ(1.59999999999999997765e+308, StringToDouble(num, NO_FLAGS)); |
| 201 } | 198 } |
| 202 | 199 |
| 203 | 200 |
| 204 TEST(ExponentNumberStr) { | 201 TEST(ExponentNumberStr) { |
| 205 CHECK_EQ(1e1, StringToDouble("1e1", NO_FLAGS)); | 202 CHECK_EQ(1e1, StringToDouble("1e1", NO_FLAGS)); |
| 206 CHECK_EQ(1e1, StringToDouble("1e+1", NO_FLAGS)); | 203 CHECK_EQ(1e1, StringToDouble("1e+1", NO_FLAGS)); |
| 207 CHECK_EQ(1e-1, StringToDouble("1e-1", NO_FLAGS)); | 204 CHECK_EQ(1e-1, StringToDouble("1e-1", NO_FLAGS)); |
| 208 CHECK_EQ(1e100, StringToDouble("1e+100", NO_FLAGS)); | 205 CHECK_EQ(1e100, StringToDouble("1e+100", NO_FLAGS)); |
| 209 CHECK_EQ(1e-100, StringToDouble("1e-100", NO_FLAGS)); | 206 CHECK_EQ(1e-100, StringToDouble("1e-100", NO_FLAGS)); |
| 210 CHECK_EQ(1e-106, StringToDouble(".000001e-100", NO_FLAGS)); | 207 CHECK_EQ(1e-106, StringToDouble(".000001e-100", NO_FLAGS)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 240 CHECK(EightBit1::is_valid(i)); | 237 CHECK(EightBit1::is_valid(i)); |
| 241 x = EightBit1::encode(i); | 238 x = EightBit1::encode(i); |
| 242 CHECK_EQ(i, EightBit1::decode(x)); | 239 CHECK_EQ(i, EightBit1::decode(x)); |
| 243 CHECK(EightBit2::is_valid(i)); | 240 CHECK(EightBit2::is_valid(i)); |
| 244 x = EightBit2::encode(i); | 241 x = EightBit2::encode(i); |
| 245 CHECK_EQ(i, EightBit2::decode(x)); | 242 CHECK_EQ(i, EightBit2::decode(x)); |
| 246 } | 243 } |
| 247 CHECK(!EightBit1::is_valid(256)); | 244 CHECK(!EightBit1::is_valid(256)); |
| 248 CHECK(!EightBit2::is_valid(256)); | 245 CHECK(!EightBit2::is_valid(256)); |
| 249 } | 246 } |
| OLD | NEW |