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

Unified Diff: test/codegen/lib/math/math_test.dart

Issue 1967773005: update dart:math (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/codegen/lib/math/math_parse_double_test.dart ('k') | test/codegen/lib/math/min_max_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/lib/math/math_test.dart
diff --git a/test/codegen/lib/math/math_test.dart b/test/codegen/lib/math/math_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b911e0a5157d1f305cab9c099c878d8068538703
--- /dev/null
+++ b/test/codegen/lib/math/math_test.dart
@@ -0,0 +1,254 @@
+// Copyright (c) 2011, 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.
+
+library math_test;
+import "package:expect/expect.dart";
+import 'dart:math';
+
+class MathTest {
+ static void testConstants() {
+ // Source for mathematical constants is Wolfram Alpha.
+ Expect.equals(2.7182818284590452353602874713526624977572470936999595749669,
+ E);
+ Expect.equals(2.3025850929940456840179914546843642076011014886287729760333,
+ LN10);
+ Expect.equals(0.6931471805599453094172321214581765680755001343602552541206,
+ LN2);
+ Expect.equals(1.4426950408889634073599246810018921374266459541529859341354,
+ LOG2E);
+ Expect.equals(0.4342944819032518276511289189166050822943970058036665661144,
+ LOG10E);
+ Expect.equals(3.1415926535897932384626433832795028841971693993751058209749,
+ PI);
+ Expect.equals(0.7071067811865475244008443621048490392848359376884740365883,
+ SQRT1_2);
+ Expect.equals(1.4142135623730950488016887242096980785696718753769480731766,
+ SQRT2);
+ }
+
+ static checkClose(double a, double b, EPSILON) {
+ Expect.equals(true, a - EPSILON <= b);
+ Expect.equals(true, b <= a + EPSILON);
+ }
+
+ static void testSin() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, sin(0.0), EPSILON);
+ checkClose(0.0, sin(PI), EPSILON);
+ checkClose(0.0, sin(2.0 * PI), EPSILON);
+ checkClose(1.0, sin(PI / 2.0), EPSILON);
+ checkClose(-1.0, sin(PI * (3.0 / 2.0)), EPSILON);
+ }
+
+ static void testCos() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(1.0, cos(0.0), EPSILON);
+ checkClose(-1.0, cos(PI), EPSILON);
+ checkClose(1.0, cos(2.0 * PI), EPSILON);
+ checkClose(0.0, cos(PI / 2.0), EPSILON);
+ checkClose(0.0, cos(PI * (3.0 / 2.0)), EPSILON);
+ }
+
+ static void testTan() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, tan(0.0), EPSILON);
+ checkClose(0.0, tan(PI), EPSILON);
+ checkClose(0.0, tan(2.0 * PI), EPSILON);
+ checkClose(1.0, tan(PI / 4.0), EPSILON);
+ }
+
+ static void testAsin() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, asin(0.0), EPSILON);
+ checkClose(PI / 2.0, asin(1.0), EPSILON);
+ checkClose(-PI / 2.0, asin(-1.0), EPSILON);
+ }
+
+
+ static void testAcos() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, acos(1.0), EPSILON);
+ checkClose(PI, acos(-1.0), EPSILON);
+ checkClose(PI / 2.0, acos(0.0), EPSILON);
+ }
+
+ static void testAtan() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, atan(0.0), EPSILON);
+ checkClose(PI / 4.0, atan(1.0), EPSILON);
+ checkClose(-PI / 4.0, atan(-1.0), EPSILON);
+ }
+
+ static void testAtan2() {
+ // Given the imprecision of PI we can't expect better results than this.
+ final double EPSILON = 1e-15;
+ checkClose(0.0, atan2(0.0, 5.0), EPSILON);
+ checkClose(PI / 4.0, atan2(2.0, 2.0), EPSILON);
+ checkClose(3 * PI / 4.0, atan2(0.5, -0.5), EPSILON);
+ checkClose(-3 * PI / 4.0, atan2(-2.5, -2.5), EPSILON);
+ }
+
+ static checkVeryClose(double a, double b) {
+ // We find a ulp (unit in the last place) by shifting the original number
+ // to the right. This only works if we are not too close to infinity or if
+ // we work with denormals.
+ // We special case or 0.0, but not for infinity.
+ if (a == 0.0) {
+ final minimalDouble = 4.9406564584124654e-324;
+ Expect.equals(true, b.abs() <= minimalDouble);
+ return;
+ }
+ if (b == 0.0) {
+ // No need to look if they are close. Otherwise the check for 'a' above
+ // whould have triggered.
+ Expect.equals(a, b);
+ }
+ final double shiftRightBy52 = 2.220446049250313080847263336181640625e-16;
+ final double shiftedA = (a * shiftRightBy52).abs();
+ // Compared to 'a', 'shiftedA' is now ~1-2 ulp.
+
+ final double limitLow = a - shiftedA;
+ final double limitHigh = a + shiftedA;
+ Expect.equals(false, a == limitLow);
+ Expect.equals(false, a == limitHigh);
+ Expect.equals(true, limitLow <= b);
+ Expect.equals(true, b <= limitHigh);
+ }
+
+ static void testSqrt() {
+ checkVeryClose(2.0, sqrt(4.0));
+ checkVeryClose(SQRT2, sqrt(2.0));
+ checkVeryClose(SQRT1_2, sqrt(0.5));
+ checkVeryClose(1e50, sqrt(1e100));
+ checkVeryClose(1.1111111061110855443054405046358901279277111935183977e56,
+ sqrt(12345678901234e99));
+ }
+
+ static void testExp() {
+ checkVeryClose(E, exp(1.0));
+ final EPSILON = 1e-15;
+ checkClose(10.0, exp(LN10), EPSILON);
+ checkClose(2.0, exp(LN2), EPSILON);
+ }
+
+ static void testLog() {
+ // Even though E is imprecise, it is good enough to get really close to 1.
+ // We still provide an epsilon.
+ checkClose(1.0, log(E), 1e-16);
+ checkVeryClose(LN10, log(10.0));
+ checkVeryClose(LN2, log(2.0));
+ }
+
+ static bool parseIntThrowsFormatException(str) {
+ try {
+ int.parse(str);
+ return false;
+ } on FormatException catch (e) {
+ return true;
+ }
+ }
+
+ static void testParseInt() {
+ Expect.equals(499, int.parse("499"));
+ Expect.equals(499, int.parse("+499"));
+ Expect.equals(-499, int.parse("-499"));
+ Expect.equals(499, int.parse(" 499 "));
+ Expect.equals(499, int.parse(" +499 "));
+ Expect.equals(-499, int.parse(" -499 "));
+ Expect.equals(0, int.parse("0"));
+ Expect.equals(0, int.parse("+0"));
+ Expect.equals(0, int.parse("-0"));
+ Expect.equals(0, int.parse(" 0 "));
+ Expect.equals(0, int.parse(" +0 "));
+ Expect.equals(0, int.parse(" -0 "));
+ Expect.equals(0x1234567890, int.parse("0x1234567890"));
+ Expect.equals(-0x1234567890, int.parse("-0x1234567890"));
+ Expect.equals(0x1234567890, int.parse(" 0x1234567890 "));
+ Expect.equals(-0x1234567890, int.parse(" -0x1234567890 "));
+ Expect.equals(256, int.parse("0x100"));
+ Expect.equals(-256, int.parse("-0x100"));
+ Expect.equals(256, int.parse(" 0x100 "));
+ Expect.equals(-256, int.parse(" -0x100 "));
+ Expect.equals(0xabcdef, int.parse("0xabcdef"));
+ Expect.equals(0xABCDEF, int.parse("0xABCDEF"));
+ Expect.equals(0xabcdef, int.parse("0xabCDEf"));
+ Expect.equals(-0xabcdef, int.parse("-0xabcdef"));
+ Expect.equals(-0xABCDEF, int.parse("-0xABCDEF"));
+ Expect.equals(0xabcdef, int.parse(" 0xabcdef "));
+ Expect.equals(0xABCDEF, int.parse(" 0xABCDEF "));
+ Expect.equals(-0xabcdef, int.parse(" -0xabcdef "));
+ Expect.equals(-0xABCDEF, int.parse(" -0xABCDEF "));
+ Expect.equals(0xabcdef, int.parse("0x00000abcdef"));
+ Expect.equals(0xABCDEF, int.parse("0x00000ABCDEF"));
+ Expect.equals(-0xabcdef, int.parse("-0x00000abcdef"));
+ Expect.equals(-0xABCDEF, int.parse("-0x00000ABCDEF"));
+ Expect.equals(0xabcdef, int.parse(" 0x00000abcdef "));
+ Expect.equals(0xABCDEF, int.parse(" 0x00000ABCDEF "));
+ Expect.equals(-0xabcdef, int.parse(" -0x00000abcdef "));
+ Expect.equals(-0xABCDEF, int.parse(" -0x00000ABCDEF "));
+ Expect.equals(10, int.parse("010"));
+ Expect.equals(-10, int.parse("-010"));
+ Expect.equals(10, int.parse(" 010 "));
+ Expect.equals(-10, int.parse(" -010 "));
+ Expect.equals(9, int.parse("09"));
+ Expect.equals(9, int.parse(" 09 "));
+ Expect.equals(-9, int.parse("-09"));
+ Expect.equals(0x1234567890, int.parse("+0x1234567890"));
+ Expect.equals(0x1234567890,int.parse(" +0x1234567890 "));
+ Expect.equals(0x100, int.parse("+0x100"));
+ Expect.equals(0x100, int.parse(" +0x100 "));
+ Expect.equals(true, parseIntThrowsFormatException("1b"));
+ Expect.equals(true, parseIntThrowsFormatException(" 1b "));
+ Expect.equals(true, parseIntThrowsFormatException(" 1 b "));
+ Expect.equals(true, parseIntThrowsFormatException("1e2"));
+ Expect.equals(true, parseIntThrowsFormatException(" 1e2 "));
+ Expect.equals(true, parseIntThrowsFormatException("00x12"));
+ Expect.equals(true, parseIntThrowsFormatException(" 00x12 "));
+ Expect.equals(true, parseIntThrowsFormatException("-1b"));
+ Expect.equals(true, parseIntThrowsFormatException(" -1b "));
+ Expect.equals(true, parseIntThrowsFormatException(" -1 b "));
+ Expect.equals(true, parseIntThrowsFormatException("-1e2"));
+ Expect.equals(true, parseIntThrowsFormatException(" -1e2 "));
+ Expect.equals(true, parseIntThrowsFormatException("-00x12"));
+ Expect.equals(true, parseIntThrowsFormatException(" -00x12 "));
+ Expect.equals(true, parseIntThrowsFormatException(" -00x12 "));
+ Expect.equals(true, parseIntThrowsFormatException("0x0x12"));
+ Expect.equals(true, parseIntThrowsFormatException("0.1"));
+ Expect.equals(true, parseIntThrowsFormatException("0x3.1"));
+ Expect.equals(true, parseIntThrowsFormatException("5."));
+ Expect.equals(true, parseIntThrowsFormatException("+-5"));
+ Expect.equals(true, parseIntThrowsFormatException("-+5"));
+ Expect.equals(true, parseIntThrowsFormatException("--5"));
+ Expect.equals(true, parseIntThrowsFormatException("++5"));
+ Expect.equals(true, parseIntThrowsFormatException("+ 5"));
+ Expect.equals(true, parseIntThrowsFormatException("- 5"));
+ Expect.equals(true, parseIntThrowsFormatException(""));
+ Expect.equals(true, parseIntThrowsFormatException(" "));
+ }
+
+ static testMain() {
+ testConstants();
+ testSin();
+ testCos();
+ testTan();
+ testAsin();
+ testAcos();
+ testAtan();
+ testAtan2();
+ testSqrt();
+ testLog();
+ testExp();
+ testParseInt();
+ }
+}
+
+main() {
+ MathTest.testMain();
+}
« no previous file with comments | « test/codegen/lib/math/math_parse_double_test.dart ('k') | test/codegen/lib/math/min_max_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698