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

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

Issue 813813003: Revert of Remove obsolete V8_INFINITY macro. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « test/cctest/test-double.cc ('k') | test/cctest/test-types.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 CHECK_EQ(40000e-328, StrtodChar("30000", -328)); 193 CHECK_EQ(40000e-328, StrtodChar("30000", -328));
194 CHECK_EQ(0.0, StrtodChar("10000", -329)); 194 CHECK_EQ(0.0, StrtodChar("10000", -329));
195 CHECK_EQ(0.0, StrtodChar("90000", -329)); 195 CHECK_EQ(0.0, StrtodChar("90000", -329));
196 CHECK_EQ(0.0, StrtodChar("000000001", -325)); 196 CHECK_EQ(0.0, StrtodChar("000000001", -325));
197 CHECK_EQ(0.0, StrtodChar("000000001", -325)); 197 CHECK_EQ(0.0, StrtodChar("000000001", -325));
198 CHECK_EQ(0.0, StrtodChar("0000000020000", -328)); 198 CHECK_EQ(0.0, StrtodChar("0000000020000", -328));
199 CHECK_EQ(40000e-328, StrtodChar("00000030000", -328)); 199 CHECK_EQ(40000e-328, StrtodChar("00000030000", -328));
200 CHECK_EQ(0.0, StrtodChar("0000000010000", -329)); 200 CHECK_EQ(0.0, StrtodChar("0000000010000", -329));
201 CHECK_EQ(0.0, StrtodChar("0000000090000", -329)); 201 CHECK_EQ(0.0, StrtodChar("0000000090000", -329));
202 202
203 // It would be more readable to put the literals (and not 203 // It would be more readable to put the literals (and not V8_INFINITY) on the
204 // std::numeric_limits<double>::infinity()) on the
205 // left side (i.e. CHECK_EQ(1e309, StrtodChar("1", 309))), but then Gcc 204 // left side (i.e. CHECK_EQ(1e309, StrtodChar("1", 309))), but then Gcc
206 // complains that the floating constant exceeds range of 'double'. 205 // complains that the floating constant exceeds range of 'double'.
207 CHECK_EQ(std::numeric_limits<double>::infinity(), StrtodChar("1", 309)); 206 CHECK_EQ(V8_INFINITY, StrtodChar("1", 309));
208 CHECK_EQ(1e308, StrtodChar("1", 308)); 207 CHECK_EQ(1e308, StrtodChar("1", 308));
209 CHECK_EQ(1234e305, StrtodChar("1234", 305)); 208 CHECK_EQ(1234e305, StrtodChar("1234", 305));
210 CHECK_EQ(1234e304, StrtodChar("1234", 304)); 209 CHECK_EQ(1234e304, StrtodChar("1234", 304));
211 CHECK_EQ(std::numeric_limits<double>::infinity(), StrtodChar("18", 307)); 210 CHECK_EQ(V8_INFINITY, StrtodChar("18", 307));
212 CHECK_EQ(17e307, StrtodChar("17", 307)); 211 CHECK_EQ(17e307, StrtodChar("17", 307));
213 CHECK_EQ(std::numeric_limits<double>::infinity(), StrtodChar("0000001", 309)); 212 CHECK_EQ(V8_INFINITY, StrtodChar("0000001", 309));
214 CHECK_EQ(1e308, StrtodChar("00000001", 308)); 213 CHECK_EQ(1e308, StrtodChar("00000001", 308));
215 CHECK_EQ(1234e305, StrtodChar("00000001234", 305)); 214 CHECK_EQ(1234e305, StrtodChar("00000001234", 305));
216 CHECK_EQ(1234e304, StrtodChar("000000001234", 304)); 215 CHECK_EQ(1234e304, StrtodChar("000000001234", 304));
217 CHECK_EQ(std::numeric_limits<double>::infinity(), 216 CHECK_EQ(V8_INFINITY, StrtodChar("0000000018", 307));
218 StrtodChar("0000000018", 307));
219 CHECK_EQ(17e307, StrtodChar("0000000017", 307)); 217 CHECK_EQ(17e307, StrtodChar("0000000017", 307));
220 CHECK_EQ(std::numeric_limits<double>::infinity(), StrtodChar("1000000", 303)); 218 CHECK_EQ(V8_INFINITY, StrtodChar("1000000", 303));
221 CHECK_EQ(1e308, StrtodChar("100000", 303)); 219 CHECK_EQ(1e308, StrtodChar("100000", 303));
222 CHECK_EQ(1234e305, StrtodChar("123400000", 300)); 220 CHECK_EQ(1234e305, StrtodChar("123400000", 300));
223 CHECK_EQ(1234e304, StrtodChar("123400000", 299)); 221 CHECK_EQ(1234e304, StrtodChar("123400000", 299));
224 CHECK_EQ(std::numeric_limits<double>::infinity(), 222 CHECK_EQ(V8_INFINITY, StrtodChar("180000000", 300));
225 StrtodChar("180000000", 300));
226 CHECK_EQ(17e307, StrtodChar("170000000", 300)); 223 CHECK_EQ(17e307, StrtodChar("170000000", 300));
227 CHECK_EQ(std::numeric_limits<double>::infinity(), 224 CHECK_EQ(V8_INFINITY, StrtodChar("00000001000000", 303));
228 StrtodChar("00000001000000", 303));
229 CHECK_EQ(1e308, StrtodChar("000000000000100000", 303)); 225 CHECK_EQ(1e308, StrtodChar("000000000000100000", 303));
230 CHECK_EQ(1234e305, StrtodChar("00000000123400000", 300)); 226 CHECK_EQ(1234e305, StrtodChar("00000000123400000", 300));
231 CHECK_EQ(1234e304, StrtodChar("0000000123400000", 299)); 227 CHECK_EQ(1234e304, StrtodChar("0000000123400000", 299));
232 CHECK_EQ(std::numeric_limits<double>::infinity(), 228 CHECK_EQ(V8_INFINITY, StrtodChar("00000000180000000", 300));
233 StrtodChar("00000000180000000", 300));
234 CHECK_EQ(17e307, StrtodChar("00000000170000000", 300)); 229 CHECK_EQ(17e307, StrtodChar("00000000170000000", 300));
235 CHECK_EQ(1.7976931348623157E+308, StrtodChar("17976931348623157", 292)); 230 CHECK_EQ(1.7976931348623157E+308, StrtodChar("17976931348623157", 292));
236 CHECK_EQ(1.7976931348623158E+308, StrtodChar("17976931348623158", 292)); 231 CHECK_EQ(1.7976931348623158E+308, StrtodChar("17976931348623158", 292));
237 CHECK_EQ(std::numeric_limits<double>::infinity(), 232 CHECK_EQ(V8_INFINITY, StrtodChar("17976931348623159", 292));
238 StrtodChar("17976931348623159", 292));
239 233
240 // The following number is the result of 89255.0/1e22. Both floating-point 234 // The following number is the result of 89255.0/1e22. Both floating-point
241 // numbers can be accurately represented with doubles. However on Linux,x86 235 // numbers can be accurately represented with doubles. However on Linux,x86
242 // the floating-point stack is set to 80bits and the double-rounding 236 // the floating-point stack is set to 80bits and the double-rounding
243 // introduces an error. 237 // introduces an error.
244 CHECK_EQ(89255e-22, StrtodChar("89255", -22)); 238 CHECK_EQ(89255e-22, StrtodChar("89255", -22));
245 239
246 // Some random values. 240 // Some random values.
247 CHECK_EQ(358416272e-33, StrtodChar("358416272", -33)); 241 CHECK_EQ(358416272e-33, StrtodChar("358416272", -33));
248 CHECK_EQ(104110013277974872254e-225, 242 CHECK_EQ(104110013277974872254e-225,
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 DiyFp upper_boundary; 400 DiyFp upper_boundary;
407 Bignum input_digits; 401 Bignum input_digits;
408 input_digits.AssignDecimalString(buffer); 402 input_digits.AssignDecimalString(buffer);
409 if (to_check == 0.0) { 403 if (to_check == 0.0) {
410 const double kMinDouble = 4e-324; 404 const double kMinDouble = 4e-324;
411 // Check that the buffer*10^exponent < (0 + kMinDouble)/2. 405 // Check that the buffer*10^exponent < (0 + kMinDouble)/2.
412 Double d(kMinDouble); 406 Double d(kMinDouble);
413 d.NormalizedBoundaries(&lower_boundary, &upper_boundary); 407 d.NormalizedBoundaries(&lower_boundary, &upper_boundary);
414 return CompareBignumToDiyFp(input_digits, exponent, lower_boundary) <= 0; 408 return CompareBignumToDiyFp(input_digits, exponent, lower_boundary) <= 0;
415 } 409 }
416 if (to_check == std::numeric_limits<double>::infinity()) { 410 if (to_check == V8_INFINITY) {
417 const double kMaxDouble = 1.7976931348623157e308; 411 const double kMaxDouble = 1.7976931348623157e308;
418 // Check that the buffer*10^exponent >= boundary between kMaxDouble and inf. 412 // Check that the buffer*10^exponent >= boundary between kMaxDouble and inf.
419 Double d(kMaxDouble); 413 Double d(kMaxDouble);
420 d.NormalizedBoundaries(&lower_boundary, &upper_boundary); 414 d.NormalizedBoundaries(&lower_boundary, &upper_boundary);
421 return CompareBignumToDiyFp(input_digits, exponent, upper_boundary) >= 0; 415 return CompareBignumToDiyFp(input_digits, exponent, upper_boundary) >= 0;
422 } 416 }
423 Double d(to_check); 417 Double d(to_check);
424 d.NormalizedBoundaries(&lower_boundary, &upper_boundary); 418 d.NormalizedBoundaries(&lower_boundary, &upper_boundary);
425 if ((d.Significand() & 1) == 0) { 419 if ((d.Significand() & 1) == 0) {
426 return CompareBignumToDiyFp(input_digits, exponent, lower_boundary) >= 0 && 420 return CompareBignumToDiyFp(input_digits, exponent, lower_boundary) >= 0 &&
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 buffer[pos++] = rng.NextInt(10) + '0'; 471 buffer[pos++] = rng.NextInt(10) + '0';
478 } 472 }
479 int exponent = DeterministicRandom() % (308*2 + 1) - 308 - length; 473 int exponent = DeterministicRandom() % (308*2 + 1) - 308 - length;
480 buffer[pos] = '\0'; 474 buffer[pos] = '\0';
481 Vector<const char> vector(buffer, pos); 475 Vector<const char> vector(buffer, pos);
482 double strtod_result = Strtod(vector, exponent); 476 double strtod_result = Strtod(vector, exponent);
483 CHECK(CheckDouble(vector, exponent, strtod_result)); 477 CHECK(CheckDouble(vector, exponent, strtod_result));
484 } 478 }
485 } 479 }
486 } 480 }
OLDNEW
« no previous file with comments | « test/cctest/test-double.cc ('k') | test/cctest/test-types.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698