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