// 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 num pow(num x, num exponent)
/// For doubles, pow(x, y) handles edge cases as follows:
/// ...
/// - otherwise, if either x or y is NaN then the result is NaN.
/// @description Checks the result when [x] or [y] is NaN.
/// @author pagolubev

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

main() {
  Expect.isTrue(Math.pow(double.nan, double.infinity).isNaN);
  Expect.isTrue(Math.pow(double.nan, double.negativeInfinity).isNaN);
  Expect.isTrue(Math.pow(double.nan, double.nan).isNaN);
  Expect.isTrue(Math.pow(double.nan, 1).isNaN);
  Expect.isTrue(Math.pow(double.nan, 1.0).isNaN);
  Expect.isTrue(Math.pow(double.nan, -1).isNaN);
  Expect.isTrue(Math.pow(double.nan, -1.0).isNaN);
  Expect.isTrue(Math.pow(double.nan, 3.33).isNaN);
  Expect.isTrue(Math.pow(double.nan, -3.33).isNaN);
  Expect.isTrue(Math.pow(double.nan, 3).isNaN);
  Expect.isTrue(Math.pow(double.nan, -3).isNaN);

  Expect.isTrue(Math.pow(double.infinity, double.nan).isNaN);
  Expect.isTrue(Math.pow(double.negativeInfinity, double.nan).isNaN);
  Expect.isTrue(Math.pow(-1, double.nan).isNaN);
  Expect.isTrue(Math.pow(-1.0, double.nan).isNaN);
  Expect.isTrue(Math.pow(3.33, double.nan).isNaN);
  Expect.isTrue(Math.pow(-3.33, double.nan).isNaN);
  Expect.isTrue(Math.pow(3, double.nan).isNaN);
  Expect.isTrue(Math.pow(-3, double.nan).isNaN);
}
