]>
git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/Expressions/11.6.2-1.js
1 /* The contents of this file are subject to the Netscape Public
2 * License Version 1.1 (the "License"); you may not use this file
3 * except in compliance with the License. You may obtain a copy of
4 * the License at http://www.mozilla.org/NPL/
6 * Software distributed under the License is distributed on an "AS
7 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
8 * implied. See the License for the specific language governing
9 * rights and limitations under the License.
11 * The Original Code is Mozilla Communicator client code, released March
14 * The Initial Developer of the Original Code is Netscape Communications
15 * Corporation. Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation. All
23 File Name: 11.6.2-1.js
24 ECMA Section: 11.6.2 The Subtraction operator ( - )
27 The production AdditiveExpression : AdditiveExpression -
28 MultiplicativeExpression is evaluated as follows:
30 1. Evaluate AdditiveExpression.
31 2. Call GetValue(Result(1)).
32 3. Evaluate MultiplicativeExpression.
33 4. Call GetValue(Result(3)).
34 5. Call ToNumber(Result(2)).
35 6. Call ToNumber(Result(4)).
36 7. Apply the subtraction operation to Result(5) and Result(6). See the
37 discussion below (11.6.3).
40 Author: christine@netscape.com
41 Date: 12 november 1997
43 var SECTION
= "11.6.2-1";
44 var VERSION
= "ECMA_1";
46 var testcases
= getTestCases();
48 writeHeaderToLog( SECTION
+ " The subtraction operator ( - )");
52 for ( tc
=0; tc
< testcases
.length
; tc
++ ) {
53 testcases
[tc
].passed
= writeTestCaseResult(
56 testcases
[tc
].description
+" = "+
57 testcases
[tc
].actual
);
59 testcases
[tc
].reason
+= ( testcases
[tc
].passed
) ? "" : "wrong value ";
64 function getTestCases() {
65 var array
= new Array();
68 // tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is
69 // a boolean primitive and a boolean object, and "MyValuelessObject", where the value is
70 // set in the object's prototype, not the object itself.
72 array
[item
++] = new TestCase( SECTION
,
73 "var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2",
75 eval("var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2") );
77 array
[item
++] = new TestCase( SECTION
,
78 "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2",
80 eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2") );
82 array
[item
++] = new TestCase( SECTION
,
83 "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2",
85 eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2") );
87 array
[item
++] = new TestCase( SECTION
,
88 "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2",
90 eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2") );
92 array
[item
++] = new TestCase( SECTION
,
93 "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2",
95 eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2") );
97 array
[item
++] = new TestCase( SECTION
,
98 "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2",
100 eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2") );
102 array
[item
++] = new TestCase( SECTION
,
103 "var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2",
105 eval("var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2") );
107 array
[item
++] = new TestCase( SECTION
,
108 "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2",
110 eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2") );
112 array
[item
++] = new TestCase( SECTION
,
113 "var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2",
115 eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2") );
117 // tests for number primitive, number object, Object object, a "MyObject" whose value is
118 // a number primitive and a number object, and "MyValuelessObject", where the value is
119 // set in the object's prototype, not the object itself.
121 array
[item
++] = new TestCase( SECTION
,
122 "var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2",
124 eval("var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2") );
126 array
[item
++] = new TestCase( SECTION
,
127 "var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2",
129 eval("var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2") );
131 array
[item
++] = new TestCase( SECTION
,
132 "var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2",
134 eval("var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2") );
136 array
[item
++] = new TestCase( SECTION
,
137 "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2",
139 eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2") );
141 array
[item
++] = new TestCase( SECTION
,
142 "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2",
144 eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2") );
146 array
[item
++] = new TestCase( SECTION
,
147 "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2",
149 eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2") );
151 array
[item
++] = new TestCase( SECTION
,
152 "var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2",
154 eval("var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2") );
156 array
[item
++] = new TestCase( SECTION
,
157 "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2",
159 eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2") );
161 array[item++] = new TestCase( SECTION,
162 "var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2",
164 eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2") );
166 // same thing with string!
167 array
[item
++] = new TestCase( SECTION
,
168 "var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1'); EXP_1 - EXP_2",
170 eval("var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1')); EXP_1 - EXP_2") );
174 function MyProtoValuelessObject() {
175 this.valueOf
= new Function ( "" );
176 this.__proto__
= null;
178 function MyProtolessObject( value
) {
179 this.valueOf
= new Function( "return this.value" );
180 this.__proto__
= null;
183 function MyValuelessObject(value
) {
184 this.__proto__
= new MyPrototypeObject(value
);
186 function MyPrototypeObject(value
) {
187 this.valueOf
= new Function( "return this.value;" );
188 this.toString
= new Function( "return (this.value + '');" );
191 function MyObject( value
) {
192 this.valueOf
= new Function( "return this.value" );
195 function MyOtherObject( value
) {
196 this.valueOf
= new Function( "return this.value" );
197 this.toString
= new Function ( "return this.value + ''" );