/*
 * 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 pow(x, exponent)
 * For doubles, pow(x, y) handles edge cases as follows:
 * ...
 *  - if x is -Infinity or -0.0 and y is not an odd integer, then the result
 *    is the same as pow(-x , y).
 * @description Checks the result when [x] is -Infinity or -0.0 and [y] is
 * not an odd integer, the result is the same as pow(-x , y).
 * @author ngl@unipro.ru
 */
import "dart:math" as Math;
import "../../Utils/expect.dart";

main() {
  Expect.equals(
      Math.pow(double.infinity, 2), Math.pow(double.negativeInfinity, 2));
  Expect.equals(
      Math.pow(double.infinity, 2.0), Math.pow(double.negativeInfinity, 2.0));
  Expect.equals(
      Math.pow(double.infinity, 22), Math.pow(double.negativeInfinity, 22));
  Expect.equals(Math.pow(double.infinity, 22.0),
      Math.pow(double.negativeInfinity, 22.0));
  Expect.equals(
      Math.pow(double.infinity, 0.2), Math.pow(double.negativeInfinity, 0.2));
  Expect.equals(Math.pow(double.infinity, double.infinity),
      Math.pow(double.negativeInfinity, double.infinity));

  Expect.equals(
      Math.pow(double.infinity, -2), Math.pow(double.negativeInfinity, -2));
  Expect.equals(Math.pow(double.infinity, -2.0),
      Math.pow(double.negativeInfinity, -2.0));
  Expect.equals(
      Math.pow(double.infinity, -22), Math.pow(double.negativeInfinity, -22));
  Expect.equals(Math.pow(double.infinity, -22.0),
      Math.pow(double.negativeInfinity, -22.0));
  Expect.equals(Math.pow(double.infinity, -0.2),
      Math.pow(double.negativeInfinity, -0.2));
  Expect.equals(Math.pow(double.infinity, double.negativeInfinity),
      Math.pow(double.negativeInfinity, double.negativeInfinity));

  Expect.equals(Math.pow(.0, 2), Math.pow(-.0, 2));
  Expect.equals(Math.pow(.0, 2.0), Math.pow(-.0, 2.0));
  Expect.equals(Math.pow(.0, 22), Math.pow(-.0, 22));
  Expect.equals(Math.pow(.0, 22.0), Math.pow(-.0, 22.0));
  Expect.equals(Math.pow(.0, 0.2), Math.pow(-.0, 0.2));
  Expect.equals(Math.pow(.0, double.infinity), Math.pow(-.0, double.infinity));

  Expect.equals(Math.pow(.0, -2), Math.pow(-.0, -2));
  Expect.equals(Math.pow(.0, -2.0), Math.pow(-.0, -2.0));
  Expect.equals(Math.pow(.0, -22), Math.pow(-.0, -22));
  Expect.equals(Math.pow(.0, -22.0), Math.pow(-.0, -22.0));
  Expect.equals(Math.pow(.0, -0.2), Math.pow(-.0, -0.2));
  Expect.equals(Math.pow(.0, double.negativeInfinity),
      Math.pow(-.0, double.negativeInfinity));
}
