]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/ecma/Expressions/11.6.2-1.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / 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/
5 *
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.
10 *
11 * The Original Code is Mozilla Communicator client code, released March
12 * 31, 1998.
13 *
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
17 * Rights Reserved.
18 *
19 * Contributor(s):
20 *
21 */
22 /**
23 File Name: 11.6.2-1.js
24 ECMA Section: 11.6.2 The Subtraction operator ( - )
25 Description:
26
27 The production AdditiveExpression : AdditiveExpression -
28 MultiplicativeExpression is evaluated as follows:
29
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).
38 8. Return Result(7).
39
40 Author: christine@netscape.com
41 Date: 12 november 1997
42 */
43 var SECTION = "11.6.2-1";
44 var VERSION = "ECMA_1";
45 startTest();
46 var testcases = getTestCases();
47
48 writeHeaderToLog( SECTION + " The subtraction operator ( - )");
49 test();
50
51 function test() {
52 for ( tc=0; tc < testcases.length; tc++ ) {
53 testcases[tc].passed = writeTestCaseResult(
54 testcases[tc].expect,
55 testcases[tc].actual,
56 testcases[tc].description +" = "+
57 testcases[tc].actual );
58
59 testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
60 }
61 stopTest();
62 return ( testcases );
63 }
64 function getTestCases() {
65 var array = new Array();
66 var item = 0;
67
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.
71
72 array[item++] = new TestCase( SECTION,
73 "var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2",
74 1,
75 eval("var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2") );
76
77 array[item++] = new TestCase( SECTION,
78 "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2",
79 1,
80 eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2") );
81
82 array[item++] = new TestCase( SECTION,
83 "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2",
84 1,
85 eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2") );
86
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",
89 1,
90 eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2") );
91
92 array[item++] = new TestCase( SECTION,
93 "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2",
94 1,
95 eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2") );
96
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",
99 Number.NaN,
100 eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2") );
101
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",
104 Number.NaN,
105 eval("var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2") );
106
107 array[item++] = new TestCase( SECTION,
108 "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2",
109 1,
110 eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2") );
111
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",
114 Number.NaN,
115 eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2") );
116
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.
120
121 array[item++] = new TestCase( SECTION,
122 "var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2",
123 99,
124 eval("var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2") );
125
126 array[item++] = new TestCase( SECTION,
127 "var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2",
128 99,
129 eval("var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2") );
130
131 array[item++] = new TestCase( SECTION,
132 "var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2",
133 99,
134 eval("var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2") );
135
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",
138 99,
139 eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2") );
140
141 array[item++] = new TestCase( SECTION,
142 "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2",
143 99,
144 eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2") );
145
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",
148 Number.NaN,
149 eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2") );
150
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",
153 99,
154 eval("var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2") );
155
156 array[item++] = new TestCase( SECTION,
157 "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2",
158 99,
159 eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2") );
160 /*
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",
163 Number.NaN,
164 eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2") );
165 */
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",
169 254,
170 eval("var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1')); EXP_1 - EXP_2") );
171
172 return ( array );
173 }
174 function MyProtoValuelessObject() {
175 this.valueOf = new Function ( "" );
176 this.__proto__ = null;
177 }
178 function MyProtolessObject( value ) {
179 this.valueOf = new Function( "return this.value" );
180 this.__proto__ = null;
181 this.value = value;
182 }
183 function MyValuelessObject(value) {
184 this.__proto__ = new MyPrototypeObject(value);
185 }
186 function MyPrototypeObject(value) {
187 this.valueOf = new Function( "return this.value;" );
188 this.toString = new Function( "return (this.value + '');" );
189 this.value = value;
190 }
191 function MyObject( value ) {
192 this.valueOf = new Function( "return this.value" );
193 this.value = value;
194 }
195 function MyOtherObject( value ) {
196 this.valueOf = new Function( "return this.value" );
197 this.toString = new Function ( "return this.value + ''" );
198 this.value = value;
199 }