8717ff636a
Change-Id: Ib34bac4962df8927cf2952a4cc5e388c84dcea79 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425984 Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
171 lines
9.1 KiB
Dart
171 lines
9.1 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// We temporarily test both the new math library and the old Math
|
|
// class. This can easily be simplified once we get rid of the Math
|
|
// class entirely.
|
|
library math_parse_double_test;
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
void parseDoubleThrowsFormatException(str) {
|
|
Expect.throwsFormatException(() => double.parse(str));
|
|
}
|
|
|
|
void runTest(double expected, String input) {
|
|
Expect.equals(expected, double.parse(input));
|
|
Expect.equals(expected, double.parse(" $input "));
|
|
Expect.equals(expected, double.parse(" $input"));
|
|
Expect.equals(expected, double.parse("$input "));
|
|
Expect.equals(expected, double.parse("+$input"));
|
|
Expect.equals(expected, double.parse(" +$input "));
|
|
Expect.equals(expected, double.parse("+$input "));
|
|
Expect.equals(expected, double.parse("\xA0 $input\xA0 "));
|
|
Expect.equals(expected, double.parse(" \xA0$input"));
|
|
Expect.equals(expected, double.parse("$input \xA0"));
|
|
Expect.equals(expected, double.parse("\xA0 +$input\xA0 "));
|
|
Expect.equals(expected, double.parse("+$input\xA0 "));
|
|
Expect.equals(expected, double.parse("\u205F $input\u205F "));
|
|
Expect.equals(expected, double.parse("$input \u2006"));
|
|
Expect.equals(expected, double.parse("\u1680 +$input\u1680 "));
|
|
Expect.equals(-expected, double.parse("-$input"));
|
|
Expect.equals(-expected, double.parse(" -$input "));
|
|
Expect.equals(-expected, double.parse("-$input "));
|
|
Expect.equals(-expected, double.parse("\xA0 -$input\xA0 "));
|
|
Expect.equals(-expected, double.parse("-$input\xA0 "));
|
|
Expect.equals(-expected, double.parse("\u1680 -$input\u1680 "));
|
|
}
|
|
|
|
final TESTS = [
|
|
[499.0, "499"],
|
|
[499.0, "499."],
|
|
[499.0, "499.0"],
|
|
[0.0, "0"],
|
|
[0.0, ".0"],
|
|
[0.0, "0."],
|
|
[0.1, "0.1"],
|
|
[0.1, ".1"],
|
|
[10.0, "010"],
|
|
[1.5, "1.5"],
|
|
[1.5, "001.5"],
|
|
[1.5, "1.500"],
|
|
[1234567.89, "1234567.89"],
|
|
[1234567e89, "1234567e89"],
|
|
[1234567.89e2, "1234567.89e2"],
|
|
[1234567.89e2, "1234567.89e+2"],
|
|
[1234567.89e-2, "1234567.89e-2"],
|
|
[5.0, "5"],
|
|
[123456700.0, "1234567.e2"],
|
|
[123456700.0, "1234567.e+2"],
|
|
[double.infinity, "Infinity"],
|
|
[5e-324, "5e-324"], // min-pos.
|
|
// Same, without exponential.
|
|
[
|
|
0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625,
|
|
"0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359923797965646954457177309266567103559397963987747960107818781263007131903114045278458171678489821036887186360569987307230500063874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715914924553293054565444011274801297099995419319894090804165633245247571478690147267801593552386115501348035264934720193790268107107491703332226844753335720832431936092382893458368060106011506169809753078342277318329247904982524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625",
|
|
],
|
|
[0.0, "2e-324"], // underflow 0.0
|
|
[0.9999999999999999, "0.9999999999999999"], // max below 1
|
|
[1.0, "1.00000000000000005"], // 1.0
|
|
[1.0000000000000002, "1.0000000000000002"], // min above 1
|
|
[2147483647.0, "2147483647"], // max int32
|
|
[2147483647.0000002, "2147483647.0000002"], // min not int32
|
|
[2147483648.0, "2147483648"], // min int not int32
|
|
[4295967295.0, "4295967295"], // max uint32
|
|
[4295967295.000001, "4295967295.000001"], // min not uint-32
|
|
[4295967296.0, "4295967296"], // min int not-uint32
|
|
[1.7976931348623157e+308, "1.7976931348623157e+308"], // Max finite
|
|
[1.7976931348623157e+308, "1.7976931348623158e+308"], // Max finite
|
|
[double.infinity, "1.7976931348623159e+308"], // Infinity
|
|
[.049999999999999994, ".049999999999999994"], // not 0.5
|
|
[.05, ".04999999999999999935"],
|
|
[4503599627370498.0, "4503599627370497.5"],
|
|
[1.2345678901234568e+39, "1234567890123456898981341324213421342134"],
|
|
[9.87291183742987e+24, "9872911837429871193379121"],
|
|
[1e21, "1e+21"],
|
|
];
|
|
|
|
void main() {
|
|
for (var test in TESTS) {
|
|
runTest(test[0] as double, test[1] as String);
|
|
}
|
|
|
|
Expect.equals(true, double.parse("-0").isNegative);
|
|
Expect.equals(true, double.parse(" -0 ").isNegative);
|
|
Expect.equals(true, double.parse("\xA0 -0 \xA0").isNegative);
|
|
Expect.isTrue(double.parse("NaN").isNaN);
|
|
Expect.isTrue(double.parse("-NaN").isNaN);
|
|
Expect.isTrue(double.parse("+NaN").isNaN);
|
|
Expect.isTrue(double.parse("NaN ").isNaN);
|
|
Expect.isTrue(double.parse("-NaN ").isNaN);
|
|
Expect.isTrue(double.parse("+NaN ").isNaN);
|
|
Expect.isTrue(double.parse(" NaN ").isNaN);
|
|
Expect.isTrue(double.parse(" -NaN ").isNaN);
|
|
Expect.isTrue(double.parse(" +NaN ").isNaN);
|
|
Expect.isTrue(double.parse(" NaN").isNaN);
|
|
Expect.isTrue(double.parse(" -NaN").isNaN);
|
|
Expect.isTrue(double.parse(" +NaN").isNaN);
|
|
Expect.isTrue(double.parse("NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse("-NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse("+NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0-NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0+NaN\xA0").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0NaN").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0-NaN").isNaN);
|
|
Expect.isTrue(double.parse(" \xA0+NaN").isNaN);
|
|
|
|
parseDoubleThrowsFormatException("1b");
|
|
parseDoubleThrowsFormatException(" 1b ");
|
|
parseDoubleThrowsFormatException(" 1 b ");
|
|
parseDoubleThrowsFormatException(" e3 ");
|
|
parseDoubleThrowsFormatException(" .e3 ");
|
|
parseDoubleThrowsFormatException("00x12");
|
|
parseDoubleThrowsFormatException(" 00x12 ");
|
|
parseDoubleThrowsFormatException("-1b");
|
|
parseDoubleThrowsFormatException(" -1b ");
|
|
parseDoubleThrowsFormatException(" -1 b ");
|
|
parseDoubleThrowsFormatException("-00x12");
|
|
parseDoubleThrowsFormatException(" -00x12 ");
|
|
parseDoubleThrowsFormatException(" -00x12 ");
|
|
parseDoubleThrowsFormatException("0x0x12");
|
|
parseDoubleThrowsFormatException("+ 1.5");
|
|
parseDoubleThrowsFormatException("- 1.5");
|
|
parseDoubleThrowsFormatException("");
|
|
parseDoubleThrowsFormatException(" ");
|
|
parseDoubleThrowsFormatException("+0x1234567890");
|
|
parseDoubleThrowsFormatException(" +0x1234567890 ");
|
|
parseDoubleThrowsFormatException(" +0x100 ");
|
|
parseDoubleThrowsFormatException("+0x100");
|
|
parseDoubleThrowsFormatException("0x1234567890");
|
|
parseDoubleThrowsFormatException("-0x1234567890");
|
|
parseDoubleThrowsFormatException(" 0x1234567890 ");
|
|
parseDoubleThrowsFormatException(" -0x1234567890 ");
|
|
parseDoubleThrowsFormatException("0x100");
|
|
parseDoubleThrowsFormatException("-0x100");
|
|
parseDoubleThrowsFormatException(" 0x100 ");
|
|
parseDoubleThrowsFormatException(" -0x100 ");
|
|
parseDoubleThrowsFormatException("0xabcdef");
|
|
parseDoubleThrowsFormatException("0xABCDEF");
|
|
parseDoubleThrowsFormatException("0xabCDEf");
|
|
parseDoubleThrowsFormatException("-0xabcdef");
|
|
parseDoubleThrowsFormatException("-0xABCDEF");
|
|
parseDoubleThrowsFormatException(" 0xabcdef ");
|
|
parseDoubleThrowsFormatException(" 0xABCDEF ");
|
|
parseDoubleThrowsFormatException(" -0xabcdef ");
|
|
parseDoubleThrowsFormatException(" -0xABCDEF ");
|
|
parseDoubleThrowsFormatException("0x00000abcdef");
|
|
parseDoubleThrowsFormatException("0x00000ABCDEF");
|
|
parseDoubleThrowsFormatException("-0x00000abcdef");
|
|
parseDoubleThrowsFormatException("-0x00000ABCDEF");
|
|
parseDoubleThrowsFormatException(" 0x00000abcdef ");
|
|
parseDoubleThrowsFormatException(" 0x00000ABCDEF ");
|
|
parseDoubleThrowsFormatException(" -0x00000abcdef ");
|
|
parseDoubleThrowsFormatException(" -0x00000ABCDEF ");
|
|
parseDoubleThrowsFormatException(" -INFINITY ");
|
|
parseDoubleThrowsFormatException(" NAN ");
|
|
parseDoubleThrowsFormatException(" inf ");
|
|
parseDoubleThrowsFormatException(" nan ");
|
|
}
|