| // 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. |
| // Dart test for testing Math.min and Math.max. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| negate(x) => -x; |
| |
| main() { |
| // Test matrix: |
| var minNonZero = 5e-324; |
| var maxDenormal = 2.225073858507201e-308; |
| var minNormal = 2.2250738585072014e-308; |
| var maxFraction = 0.9999999999999999; |
| var minAbove1 = 1.0000000000000002; |
| var maxNonInt = 4503599627370495.5; |
| var maxNonIntFloorAsInt = maxNonInt.floor(); |
| var maxNonIntFloorAsDouble = maxNonIntFloorAsInt.toDouble(); |
| var maxExactIntAsDouble = 9007199254740992.0; |
| var maxExactIntAsInt = 9007199254740992; |
| var two53 = 1 << 53; // Same as maxExactIntAsInt. |
| var two53p1 = two53 + 1; |
| var maxFiniteAsDouble = 1.7976931348623157e+308; |
| var maxFiniteAsInt = maxFiniteAsDouble.truncate(); |
| var inf = double.infinity; |
| var nan = double.nan; |
| var mnan = negate(nan); |
| var minInt64 = -0x8000000000000000; |
| var minInt64AsDouble = minInt64.toDouble(); |
| var maxInt64 = 0x7fffffffffffffff; |
| var maxInt64AsDouble = maxInt64.toDouble(); // 1 << 63 |
| var matrix = [ |
| -inf, |
| -maxFiniteAsDouble, |
| [minInt64, minInt64AsDouble], |
| [-maxInt64, -maxFiniteAsInt], |
| -two53p1, |
| [-two53, -maxExactIntAsInt, -maxExactIntAsDouble], |
| -maxNonInt, |
| [-maxNonIntFloorAsDouble, -maxNonIntFloorAsInt], |
| [-499.0, -499], |
| -minAbove1, |
| [-1.0, -1], |
| -maxFraction, |
| -minNormal, |
| -maxDenormal, |
| -minNonZero, |
| -0.0, |
| [0, 0, 0], |
| minNonZero, |
| maxDenormal, |
| minNormal, |
| maxFraction, |
| [1.0, 1], |
| minAbove1, |
| [499.0, 499], |
| [maxNonIntFloorAsDouble, maxNonIntFloorAsInt], |
| maxNonInt, |
| [two53, maxExactIntAsInt, maxExactIntAsDouble], |
| two53p1, |
| [maxInt64, maxFiniteAsInt], |
| maxInt64AsDouble, |
| maxFiniteAsDouble, |
| inf, |
| [nan, mnan], |
| ]; |
| |
| check(left, right, expectedResult) { |
| if (left is List) { |
| for (var x in left) check(x, right, expectedResult); |
| return; |
| } |
| if (right is List) { |
| for (var x in right) check(left, x, expectedResult); |
| return; |
| } |
| int actual = left.compareTo(right); |
| Expect.equals( |
| expectedResult, |
| actual, |
| "($left).compareTo($right) failed " |
| "(should have been $expectedResult, was $actual"); |
| } |
| |
| for (int i = 0; i < matrix.length; i++) { |
| for (int j = 0; j < matrix.length; j++) { |
| var left = matrix[i]; |
| var right = matrix[j]; |
| if (left is List) { |
| check(left, left, 0); |
| } |
| check(left, right, i == j ? 0 : (i < j ? -1 : 1)); |
| } |
| } |
| } |