1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma/Expressions/11.6.2-1.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,131 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 + 1.10 +/** 1.11 + File Name: 11.6.2-1.js 1.12 + ECMA Section: 11.6.2 The Subtraction operator ( - ) 1.13 + Description: 1.14 + 1.15 + The production AdditiveExpression : AdditiveExpression - 1.16 + MultiplicativeExpression is evaluated as follows: 1.17 + 1.18 + 1. Evaluate AdditiveExpression. 1.19 + 2. Call GetValue(Result(1)). 1.20 + 3. Evaluate MultiplicativeExpression. 1.21 + 4. Call GetValue(Result(3)). 1.22 + 5. Call ToNumber(Result(2)). 1.23 + 6. Call ToNumber(Result(4)). 1.24 + 7. Apply the subtraction operation to Result(5) and Result(6). See the 1.25 + discussion below (11.6.3). 1.26 + 8. Return Result(7). 1.27 + 1.28 + Author: christine@netscape.com 1.29 + Date: 12 november 1997 1.30 +*/ 1.31 +var SECTION = "11.6.2-1"; 1.32 +var VERSION = "ECMA_1"; 1.33 +startTest(); 1.34 + 1.35 +writeHeaderToLog( SECTION + " The subtraction operator ( - )"); 1.36 + 1.37 +// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is 1.38 +// a boolean primitive and a boolean object. 1.39 + 1.40 +new TestCase( SECTION, 1.41 + "var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2", 1.42 + 1, 1.43 + eval("var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2") ); 1.44 + 1.45 +new TestCase( SECTION, 1.46 + "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2", 1.47 + 1, 1.48 + eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2") ); 1.49 + 1.50 +new TestCase( SECTION, 1.51 + "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2", 1.52 + 1, 1.53 + eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2") ); 1.54 + 1.55 +new TestCase( SECTION, 1.56 + "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2", 1.57 + 1, 1.58 + eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2") ); 1.59 + 1.60 +new TestCase( SECTION, 1.61 + "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2", 1.62 + 1, 1.63 + eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2") ); 1.64 + 1.65 +new TestCase( SECTION, 1.66 + "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2", 1.67 + Number.NaN, 1.68 + eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2") ); 1.69 + 1.70 +new TestCase( SECTION, 1.71 + "var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2", 1.72 + Number.NaN, 1.73 + eval("var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2") ); 1.74 + 1.75 +// tests for number primitive, number object, Object object, a "MyObject" whose value is 1.76 +// a number primitive and a number object. 1.77 + 1.78 +new TestCase( SECTION, 1.79 + "var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2", 1.80 + 99, 1.81 + eval("var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2") ); 1.82 + 1.83 +new TestCase( SECTION, 1.84 + "var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2", 1.85 + 99, 1.86 + eval("var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2") ); 1.87 + 1.88 +new TestCase( SECTION, 1.89 + "var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2", 1.90 + 99, 1.91 + eval("var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2") ); 1.92 + 1.93 +new TestCase( SECTION, 1.94 + "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2", 1.95 + 99, 1.96 + eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2") ); 1.97 + 1.98 +new TestCase( SECTION, 1.99 + "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2", 1.100 + 99, 1.101 + eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2") ); 1.102 + 1.103 +new TestCase( SECTION, 1.104 + "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2", 1.105 + Number.NaN, 1.106 + eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2") ); 1.107 + 1.108 +new TestCase( SECTION, 1.109 + "var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2", 1.110 + 99, 1.111 + eval("var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2") ); 1.112 + 1.113 +// same thing with string! 1.114 +new TestCase( SECTION, 1.115 + "var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1'); EXP_1 - EXP_2", 1.116 + 254, 1.117 + eval("var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1')); EXP_1 - EXP_2") ); 1.118 + 1.119 +test(); 1.120 + 1.121 +function MyPrototypeObject(value) { 1.122 + this.valueOf = new Function( "return this.value;" ); 1.123 + this.toString = new Function( "return (this.value + '');" ); 1.124 + this.value = value; 1.125 +} 1.126 +function MyObject( value ) { 1.127 + this.valueOf = new Function( "return this.value" ); 1.128 + this.value = value; 1.129 +} 1.130 +function MyOtherObject( value ) { 1.131 + this.valueOf = new Function( "return this.value" ); 1.132 + this.toString = new Function ( "return this.value + ''" ); 1.133 + this.value = value; 1.134 +}