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