// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: If base < 0 and base is finite and exponent is finite and exponent is not an integer, the result is NaN.
esid: sec-applying-the-exp-operator
---*/


var exponent = new Array();
var base = new Array();
base[0] = -1.7976931348623157E308; //largest (by module) finite number
base[1] = -Math.PI;
base[2] = -1;
base[3] = -0.000000000000001;
var basenum = 4;

exponent[0] = -Math.PI;
exponent[1] = -Math.E;
exponent[2] = -1.000000000000001;
exponent[3] = -0.000000000000001;
exponent[4] = 0.000000000000001;
exponent[5] = 1.000000000000001;
exponent[6] = Math.E;
exponent[7] = Math.PI;

var exponentnum = 8;

for (var i = 0; i < basenum; i++) {
	for (var j = 0; j < exponentnum; j++) {
    assert.sameValue(
      Math.pow(base[i], exponent[j]),
      NaN,
      "(" + base[i] + ", " + exponent[j] + ")"
    );
  }
}
