// Copyright (c) 2017, 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 num pow(num x, num exponent)
/// For doubles, pow(x, y) handles edge cases as follows:
/// ...
///  - if [y] is -Infinity, the result is 1/pow([x], Infinity).
/// @description Checks the result when [y] is 1/pow([x], Infinity).
/// @author ngl@unipro.ru

import "dart:math" as Math;
import "../../Utils/expect.dart";

main() {
  Expect.equals(1 / Math.pow(0.9999999999999999, double.infinity),
      Math.pow(0.9999999999999999, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-0.9999999999999999, double.infinity),
      Math.pow(-0.9999999999999999, double.negativeInfinity));
  Expect.equals(1 / Math.pow(0.5, double.infinity),
      Math.pow(0.5, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-0.5, double.infinity),
      Math.pow(-0.5, double.negativeInfinity));
  Expect.equals(1 / Math.pow(4.9406564584124654e-324, double.infinity),
      Math.pow(4.9406564584124654e-324, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-4.9406564584124654e-324, double.infinity),
      Math.pow(-4.9406564584124654e-324, double.negativeInfinity));

  Expect.equals(1 / Math.pow(-1, double.infinity),
      Math.pow(-1, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-1.0, double.infinity),
      Math.pow(-1.0, double.negativeInfinity));

  Expect.equals(1 / Math.pow(1.0000000000000002, double.infinity),
      Math.pow(1.0000000000000002, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-1.0000000000000002, double.infinity),
      Math.pow(-1.0000000000000002, double.negativeInfinity));
  Expect.equals(1 / Math.pow(2, double.infinity),
      Math.pow(2, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-2, double.infinity),
      Math.pow(-2, double.negativeInfinity));
  Expect.equals(1 / Math.pow(123.123, double.infinity),
      Math.pow(123.123, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-123.123, double.infinity),
      Math.pow(-123.123, double.negativeInfinity));
  Expect.equals(1 / Math.pow(1.7976931348623157e308, double.infinity),
      Math.pow(1.7976931348623157e308, double.negativeInfinity));
  Expect.equals(1 / Math.pow(-1.7976931348623157e308, double.infinity),
      Math.pow(-1.7976931348623157e308, double.negativeInfinity));
}
