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

/*---
info: Operator x - y returns ToNumber(x) - ToNumber(y)
es5id: 11.6.2_A3_T2.2
description: >
    Type(x) is different from Type(y) and both types vary between
    Number (primitive or object) and String (primitive and object)
---*/

//CHECK#1
if ("1" - 1 !== 0) {
  $ERROR('#1: "1" - 1 === 0. Actual: ' + ("1" - 1));
}

//CHECK#2
if (1 - "1" !== 0) {
  $ERROR('#2: 1 - "1" === 0. Actual: ' + (1 - "1"));
}

//CHECK#3
if (new String("1") - 1 !== 0) {
  $ERROR('#3: new String("1") - 1 === 0. Actual: ' + (new String("1") - 1));
}

//CHECK#4
if (1 - new String("1") !== 0) {
  $ERROR('#4: 1 - new String("1") === 0. Actual: ' + (1 - new String("1")));
}

//CHECK#5
if ("1" - new Number(1) !== 0) {
  $ERROR('#5: "1" - new Number(1) === 0. Actual: ' + ("1" - new Number(1)));
}

//CHECK#6
if (new Number(1) - "1" !== 0) {
  $ERROR('#6: new Number(1) - "1" === 0. Actual: ' + (new Number(1) - "1"));
}

//CHECK#7
if (new String("1") - new Number(1) !== 0) {
  $ERROR('#7: new String("1") - new Number(1) === 0. Actual: ' + (new String("1") - new Number(1)));
}

//CHECK#8
if (new Number(1) - new String("1") !== 0) {
  $ERROR('#8: new Number(1) - new String("1") === 0. Actual: ' + (new Number(1) - new String("1")));
}

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

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