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

/*---
info: If y is +Infinity and x !== y, return true
es5id: 11.8.1_A4.6
description: x is number primitive
---*/

//CHECK#1
if ((0 < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#1: (0 < +Infinity) === true');
}

//CHECK#2
if ((1.1 < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#2: (1.1 < +Infinity) === true');
}

//CHECK#3
if ((-1.1 < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#3: (-1.1 < +Infinity) === true');
}

//CHECK#4
if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#4: (-Infinity < +Infinity) === true');
}

//CHECK#5
if ((Number.MAX_VALUE < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#5: (Number.MAX_VALUE < +Infinity) === true');
}

//CHECK#6
if ((Number.MIN_VALUE < Number.POSITIVE_INFINITY) !== true) {
  $ERROR('#6: (Number.MIN_VALUE < +Infinity) === true');
}
