// 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. 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)); } } }