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/. */
8
File Name: 11.13.2-4.js
9
ECMA Section: 11.13.2 Compound Assignment: %=
12
*= /= %= += -= <<= >>= >>>= &= ^= |=
14
11.13.2 Compound assignment ( op= )
16
The production AssignmentExpression :
17
LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
18
the operators indicated above, is evaluated as follows:
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)).
28
Author: christine@netscape.com
29
Date: 12 november 1997
31
var SECTION = "11.13.2-3";
32
var VERSION = "ECMA_1";
35
writeHeaderToLog( SECTION + " Compound Assignment: +=");
37
// If either operand is NaN, result is NaN
39
new TestCase( SECTION,
40
"VAR1 = NaN; VAR2=1; VAR1 %= VAR2",
42
eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2") );
44
new TestCase( SECTION,
45
"VAR1 = NaN; VAR2=1; VAR1 %= VAR2; VAR1",
47
eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2; VAR1") );
49
new TestCase( SECTION,
50
"VAR1 = NaN; VAR2=0; VAR1 %= VAR2",
52
eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2") );
54
new TestCase( SECTION,
55
"VAR1 = NaN; VAR2=0; VAR1 %= VAR2; VAR1",
57
eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2; VAR1") );
59
new TestCase( SECTION,
60
"VAR1 = 0; VAR2=NaN; VAR1 %= VAR2",
62
eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2") );
64
new TestCase( SECTION,
65
"VAR1 = 0; VAR2=NaN; VAR1 %= VAR2; VAR1",
67
eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2; VAR1") );
69
// if the dividend is infinity or the divisor is zero or both, the result is NaN
71
new TestCase( SECTION,
72
"VAR1 = Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1",
74
eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
76
new TestCase( SECTION,
77
"VAR1 = Infinity; VAR2= -Infinity; VAR1 %= VAR2; VAR1",
79
eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
81
new TestCase( SECTION,
82
"VAR1 =-Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1",
84
eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
86
new TestCase( SECTION,
87
"VAR1 =-Infinity; VAR2=-Infinity; VAR1 %= VAR2; VAR1",
89
eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
91
new TestCase( SECTION,
92
"VAR1 = 0; VAR2= Infinity; VAR2 %= VAR1",
94
eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
96
new TestCase( SECTION,
97
"VAR1 = -0; VAR2= Infinity; VAR2 %= VAR1",
99
eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
101
new TestCase( SECTION,
102
"VAR1 = -0; VAR2= -Infinity; VAR2 %= VAR1",
104
eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
106
new TestCase( SECTION,
107
"VAR1 = 0; VAR2= -Infinity; VAR2 %= VAR1",
109
eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
111
new TestCase( SECTION,
112
"VAR1 = 1; VAR2= Infinity; VAR2 %= VAR1",
114
eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
116
new TestCase( SECTION,
117
"VAR1 = -1; VAR2= Infinity; VAR2 %= VAR1",
119
eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
121
new TestCase( SECTION,
122
"VAR1 = -1; VAR2= -Infinity; VAR2 %= VAR1",
124
eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
126
new TestCase( SECTION,
127
"VAR1 = 1; VAR2= -Infinity; VAR2 %= VAR1",
129
eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
131
new TestCase( SECTION,
132
"VAR1 = 0; VAR2= 0; VAR1 %= VAR2",
134
eval("VAR1 = 0; VAR2 = 0; VAR1 %= VAR2; VAR1") );
136
new TestCase( SECTION,
137
"VAR1 = 0; VAR2= -0; VAR1 %= VAR2",
139
eval("VAR1 = 0; VAR2 = -0; VAR1 %= VAR2; VAR1") );
141
new TestCase( SECTION,
142
"VAR1 = -0; VAR2= 0; VAR1 %= VAR2",
144
eval("VAR1 = -0; VAR2 = 0; VAR1 %= VAR2; VAR1") );
146
new TestCase( SECTION,
147
"VAR1 = -0; VAR2= -0; VAR1 %= VAR2",
149
eval("VAR1 = -0; VAR2 = -0; VAR1 %= VAR2; VAR1") );
151
new TestCase( SECTION,
152
"VAR1 = 1; VAR2= 0; VAR1 %= VAR2",
154
eval("VAR1 = 1; VAR2 = 0; VAR1 %= VAR2; VAR1") );
156
new TestCase( SECTION,
157
"VAR1 = 1; VAR2= -0; VAR1 %= VAR2",
159
eval("VAR1 = 1; VAR2 = -0; VAR1 %= VAR2; VAR1") );
161
new TestCase( SECTION,
162
"VAR1 = -1; VAR2= 0; VAR1 %= VAR2",
164
eval("VAR1 = -1; VAR2 = 0; VAR1 %= VAR2; VAR1") );
166
new TestCase( SECTION,
167
"VAR1 = -1; VAR2= -0; VAR1 %= VAR2",
169
eval("VAR1 = -1; VAR2 = -0; VAR1 %= VAR2; VAR1") );
171
// if the dividend is finite and the divisor is an infinity, the result equals the dividend.
173
new TestCase( SECTION,
174
"VAR1 = 0; VAR2= Infinity; VAR1 %= VAR2;VAR1",
176
eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
178
new TestCase( SECTION,
179
"VAR1 = -0; VAR2= Infinity; VAR1 %= VAR2;VAR1",
181
eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
183
new TestCase( SECTION,
184
"VAR1 = -0; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
186
eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
188
new TestCase( SECTION,
189
"VAR1 = 0; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
191
eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
193
new TestCase( SECTION,
194
"VAR1 = 1; VAR2= Infinity; VAR1 %= VAR2;VAR1",
196
eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
198
new TestCase( SECTION,
199
"VAR1 = -1; VAR2= Infinity; VAR1 %= VAR2;VAR1",
201
eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
203
new TestCase( SECTION,
204
"VAR1 = -1; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
206
eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
208
new TestCase( SECTION,
209
"VAR1 = 1; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
211
eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
213
// if the dividend is a zero and the divisor is finite, the result is the same as the dividend
215
new TestCase( SECTION,
216
"VAR1 = 0; VAR2= 1; VAR1 %= VAR2; VAR1",
218
eval("VAR1 = 0; VAR2 = 1; VAR1 %= VAR2; VAR1") );
220
new TestCase( SECTION,
221
"VAR1 = -0; VAR2= 1; VAR1 %= VAR2; VAR1",
223
eval("VAR1 = -0; VAR2 = 1; VAR1 %= VAR2; VAR1") );
225
new TestCase( SECTION,
226
"VAR1 = -0; VAR2= -1; VAR1 %= VAR2; VAR1",
228
eval("VAR1 = -0; VAR2 = -1; VAR1 %= VAR2; VAR1") );
230
new TestCase( SECTION,
231
"VAR1 = 0; VAR2= -1; VAR1 %= VAR2; VAR1",
233
eval("VAR1 = 0; VAR2 = -1; VAR1 %= VAR2; VAR1") );
236
new TestCase( SECTION,
237
"VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1",
239
eval("VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1") );
241
new TestCase( SECTION,
242
"VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1",
244
eval("VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1") );
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") );
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") );
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") );
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") );