// 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.

/**
 * @assertion static void approxEquals(num expected, num actual, [num tolerance = null, String reason = null])
 * Failure if the difference between expected and actual is greater than the
 * given tolerance.
 * @description Checks that no exception is thrown when the absolute difference
 * between arguments is strictly less than specified non-negative, non-NAN
 * tolerance, regardless of reason (the last argument).
 * @author rodionov
 * @author varlax
 */
import "../../../Utils/expect.dart";

import "dart:math" as Math;

main() {
  final double MIN_DOUBLE = Math.pow(2.0, -1074) as double;
  final double NEG_MIN_DOUBLE = -1 * MIN_DOUBLE; 
  final double MAX_DOUBLE = (2 - Math.pow(2.0, -52)) * Math.pow(2.0, 1023) as double;
  final double NEG_MAX_DOUBLE = -1 * MAX_DOUBLE; 

  Expect.approxEquals(100.0, 101, 1.1);
  Expect.approxEquals(101, 102.1, 2, "");
  Expect.approxEquals(101.0, 100, 1.0000001, "not empty");

  Expect.approxEquals(-101, -100.0, 1.111);
  Expect.approxEquals(-1, 1.0, 3, "");

  Expect.approxEquals(-0.0, 0, 0.111);

  Expect.approxEquals(MAX_DOUBLE, MIN_DOUBLE, MAX_DOUBLE, "not empty");
  Expect.approxEquals(NEG_MAX_DOUBLE, NEG_MIN_DOUBLE, MAX_DOUBLE, "not empty");

  Expect.approxEquals(MAX_DOUBLE, NEG_MAX_DOUBLE, double.infinity);
  Expect.approxEquals(MIN_DOUBLE, NEG_MIN_DOUBLE, 0.0000000001, "");
}
