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

/*---
info: |
    The result of division is determined by the specification of IEEE 754
    arithmetics
es5id: 11.5.2_A4_T1.2
description: If right operand is NaN, the result is NaN
---*/

//CHECK#1
if (isNaN(Number.NaN / Number.NaN) !== true) {
  $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN));
}  

//CHECK#2
if (isNaN(+0 / Number.NaN) !== true) {
  $ERROR('#2: +0 / NaN === Not-a-Number. Actual: ' + (+0 / NaN)); 
} 

//CHECK#3
if (isNaN(-0 / Number.NaN) !== true) {
  $ERROR('#3: -0 / NaN === Not-a-Number. Actual: ' + (-0 / NaN)); 
} 

//CHECK#4
if (isNaN(Number.POSITIVE_INFINITY / Number.NaN) !== true) {
  $ERROR('#4: Infinity / NaN === Not-a-Number. Actual: ' + (Infinity / NaN));
} 

//CHECK#5
if (isNaN(Number.NEGATIVE_INFINITY / Number.NaN) !== true) {
  $ERROR('#5:  -Infinity / NaN === Not-a-Number. Actual: ' + ( -Infinity / NaN)); 
} 

//CHECK#6
if (isNaN(Number.MAX_VALUE / Number.NaN) !== true) {
  $ERROR('#6: Number.MAX_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE / NaN));
} 

//CHECK#7
if (isNaN(Number.MIN_VALUE / Number.NaN) !== true) {
  $ERROR('#7: Number.MIN_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE / NaN)); 
}

//CHECK#8
if (isNaN(1 / Number.NaN) !== true) {
  $ERROR('#8: 1 / NaN === Not-a-Number. Actual: ' + (1 / NaN));  
}
