|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 |
|
7 /** |
|
8 File Name: 11.13.2-4.js |
|
9 ECMA Section: 11.13.2 Compound Assignment: %= |
|
10 Description: |
|
11 |
|
12 *= /= %= += -= <<= >>= >>>= &= ^= |= |
|
13 |
|
14 11.13.2 Compound assignment ( op= ) |
|
15 |
|
16 The production AssignmentExpression : |
|
17 LeftHandSideExpression @ = AssignmentExpression, where @ represents one of |
|
18 the operators indicated above, is evaluated as follows: |
|
19 |
|
20 1. Evaluate LeftHandSideExpression. |
|
21 2. Call GetValue(Result(1)). |
|
22 3. Evaluate AssignmentExpression. |
|
23 4. Call GetValue(Result(3)). |
|
24 5. Apply operator @ to Result(2) and Result(4). |
|
25 6. Call PutValue(Result(1), Result(5)). |
|
26 7. Return Result(5). |
|
27 |
|
28 Author: christine@netscape.com |
|
29 Date: 12 november 1997 |
|
30 */ |
|
31 var SECTION = "11.13.2-3"; |
|
32 var VERSION = "ECMA_1"; |
|
33 startTest(); |
|
34 |
|
35 writeHeaderToLog( SECTION + " Compound Assignment: +="); |
|
36 |
|
37 // If either operand is NaN, result is NaN |
|
38 |
|
39 new TestCase( SECTION, |
|
40 "VAR1 = NaN; VAR2=1; VAR1 %= VAR2", |
|
41 Number.NaN, |
|
42 eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2") ); |
|
43 |
|
44 new TestCase( SECTION, |
|
45 "VAR1 = NaN; VAR2=1; VAR1 %= VAR2; VAR1", |
|
46 Number.NaN, |
|
47 eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2; VAR1") ); |
|
48 |
|
49 new TestCase( SECTION, |
|
50 "VAR1 = NaN; VAR2=0; VAR1 %= VAR2", |
|
51 Number.NaN, |
|
52 eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2") ); |
|
53 |
|
54 new TestCase( SECTION, |
|
55 "VAR1 = NaN; VAR2=0; VAR1 %= VAR2; VAR1", |
|
56 Number.NaN, |
|
57 eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2; VAR1") ); |
|
58 |
|
59 new TestCase( SECTION, |
|
60 "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2", |
|
61 Number.NaN, |
|
62 eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2") ); |
|
63 |
|
64 new TestCase( SECTION, |
|
65 "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2; VAR1", |
|
66 Number.NaN, |
|
67 eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2; VAR1") ); |
|
68 |
|
69 // if the dividend is infinity or the divisor is zero or both, the result is NaN |
|
70 |
|
71 new TestCase( SECTION, |
|
72 "VAR1 = Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", |
|
73 Number.NaN, |
|
74 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
75 |
|
76 new TestCase( SECTION, |
|
77 "VAR1 = Infinity; VAR2= -Infinity; VAR1 %= VAR2; VAR1", |
|
78 Number.NaN, |
|
79 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
80 |
|
81 new TestCase( SECTION, |
|
82 "VAR1 =-Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", |
|
83 Number.NaN, |
|
84 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
85 |
|
86 new TestCase( SECTION, |
|
87 "VAR1 =-Infinity; VAR2=-Infinity; VAR1 %= VAR2; VAR1", |
|
88 Number.NaN, |
|
89 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
90 |
|
91 new TestCase( SECTION, |
|
92 "VAR1 = 0; VAR2= Infinity; VAR2 %= VAR1", |
|
93 Number.NaN, |
|
94 eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
95 |
|
96 new TestCase( SECTION, |
|
97 "VAR1 = -0; VAR2= Infinity; VAR2 %= VAR1", |
|
98 Number.NaN, |
|
99 eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
100 |
|
101 new TestCase( SECTION, |
|
102 "VAR1 = -0; VAR2= -Infinity; VAR2 %= VAR1", |
|
103 Number.NaN, |
|
104 eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
105 |
|
106 new TestCase( SECTION, |
|
107 "VAR1 = 0; VAR2= -Infinity; VAR2 %= VAR1", |
|
108 Number.NaN, |
|
109 eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
110 |
|
111 new TestCase( SECTION, |
|
112 "VAR1 = 1; VAR2= Infinity; VAR2 %= VAR1", |
|
113 Number.NaN, |
|
114 eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
115 |
|
116 new TestCase( SECTION, |
|
117 "VAR1 = -1; VAR2= Infinity; VAR2 %= VAR1", |
|
118 Number.NaN, |
|
119 eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
120 |
|
121 new TestCase( SECTION, |
|
122 "VAR1 = -1; VAR2= -Infinity; VAR2 %= VAR1", |
|
123 Number.NaN, |
|
124 eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
125 |
|
126 new TestCase( SECTION, |
|
127 "VAR1 = 1; VAR2= -Infinity; VAR2 %= VAR1", |
|
128 Number.NaN, |
|
129 eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); |
|
130 |
|
131 new TestCase( SECTION, |
|
132 "VAR1 = 0; VAR2= 0; VAR1 %= VAR2", |
|
133 Number.NaN, |
|
134 eval("VAR1 = 0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); |
|
135 |
|
136 new TestCase( SECTION, |
|
137 "VAR1 = 0; VAR2= -0; VAR1 %= VAR2", |
|
138 Number.NaN, |
|
139 eval("VAR1 = 0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); |
|
140 |
|
141 new TestCase( SECTION, |
|
142 "VAR1 = -0; VAR2= 0; VAR1 %= VAR2", |
|
143 Number.NaN, |
|
144 eval("VAR1 = -0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); |
|
145 |
|
146 new TestCase( SECTION, |
|
147 "VAR1 = -0; VAR2= -0; VAR1 %= VAR2", |
|
148 Number.NaN, |
|
149 eval("VAR1 = -0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); |
|
150 |
|
151 new TestCase( SECTION, |
|
152 "VAR1 = 1; VAR2= 0; VAR1 %= VAR2", |
|
153 Number.NaN, |
|
154 eval("VAR1 = 1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); |
|
155 |
|
156 new TestCase( SECTION, |
|
157 "VAR1 = 1; VAR2= -0; VAR1 %= VAR2", |
|
158 Number.NaN, |
|
159 eval("VAR1 = 1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); |
|
160 |
|
161 new TestCase( SECTION, |
|
162 "VAR1 = -1; VAR2= 0; VAR1 %= VAR2", |
|
163 Number.NaN, |
|
164 eval("VAR1 = -1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); |
|
165 |
|
166 new TestCase( SECTION, |
|
167 "VAR1 = -1; VAR2= -0; VAR1 %= VAR2", |
|
168 Number.NaN, |
|
169 eval("VAR1 = -1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); |
|
170 |
|
171 // if the dividend is finite and the divisor is an infinity, the result equals the dividend. |
|
172 |
|
173 new TestCase( SECTION, |
|
174 "VAR1 = 0; VAR2= Infinity; VAR1 %= VAR2;VAR1", |
|
175 0, |
|
176 eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
177 |
|
178 new TestCase( SECTION, |
|
179 "VAR1 = -0; VAR2= Infinity; VAR1 %= VAR2;VAR1", |
|
180 -0, |
|
181 eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
182 |
|
183 new TestCase( SECTION, |
|
184 "VAR1 = -0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", |
|
185 -0, |
|
186 eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
187 |
|
188 new TestCase( SECTION, |
|
189 "VAR1 = 0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", |
|
190 0, |
|
191 eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
192 |
|
193 new TestCase( SECTION, |
|
194 "VAR1 = 1; VAR2= Infinity; VAR1 %= VAR2;VAR1", |
|
195 1, |
|
196 eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
197 |
|
198 new TestCase( SECTION, |
|
199 "VAR1 = -1; VAR2= Infinity; VAR1 %= VAR2;VAR1", |
|
200 -1, |
|
201 eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
202 |
|
203 new TestCase( SECTION, |
|
204 "VAR1 = -1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", |
|
205 -1, |
|
206 eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
207 |
|
208 new TestCase( SECTION, |
|
209 "VAR1 = 1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", |
|
210 1, |
|
211 eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); |
|
212 |
|
213 // if the dividend is a zero and the divisor is finite, the result is the same as the dividend |
|
214 |
|
215 new TestCase( SECTION, |
|
216 "VAR1 = 0; VAR2= 1; VAR1 %= VAR2; VAR1", |
|
217 0, |
|
218 eval("VAR1 = 0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); |
|
219 |
|
220 new TestCase( SECTION, |
|
221 "VAR1 = -0; VAR2= 1; VAR1 %= VAR2; VAR1", |
|
222 -0, |
|
223 eval("VAR1 = -0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); |
|
224 |
|
225 new TestCase( SECTION, |
|
226 "VAR1 = -0; VAR2= -1; VAR1 %= VAR2; VAR1", |
|
227 -0, |
|
228 eval("VAR1 = -0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); |
|
229 |
|
230 new TestCase( SECTION, |
|
231 "VAR1 = 0; VAR2= -1; VAR1 %= VAR2; VAR1", |
|
232 0, |
|
233 eval("VAR1 = 0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); |
|
234 |
|
235 // string cases |
|
236 new TestCase( SECTION, |
|
237 "VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1", |
|
238 0, |
|
239 eval("VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1") ); |
|
240 |
|
241 new TestCase( SECTION, |
|
242 "VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1", |
|
243 0, |
|
244 eval("VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1") ); |
|
245 /* |
|
246 new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2") ); |
|
247 new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); |
|
248 |
|
249 new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2") ); |
|
250 new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2") ); |
|
251 new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); |
|
252 |
|
253 // boolean cases |
|
254 new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 %= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 %= VAR2") ); |
|
255 new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 %= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 %= VAR2") ); |
|
256 |
|
257 // object cases |
|
258 new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2; VAR1") ); |
|
259 new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1") ); |
|
260 new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2") ); |
|
261 new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2") ); |
|
262 |
|
263 */ |
|
264 |
|
265 test(); |
|
266 |