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/. */
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-2";
32
var VERSION = "ECMA_1";
35
writeHeaderToLog( SECTION + " Compound Assignment: /=");
40
new TestCase( SECTION,
41
"VAR1 = NaN; VAR2=1; VAR1 /= VAR2",
43
eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2") );
45
new TestCase( SECTION,
46
"VAR1 = NaN; VAR2=1; VAR1 /= VAR2; VAR1",
48
eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2; VAR1") );
50
new TestCase( SECTION,
51
"VAR1 = NaN; VAR2=0; VAR1 /= VAR2",
53
eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2") );
55
new TestCase( SECTION,
56
"VAR1 = NaN; VAR2=0; VAR1 /= VAR2; VAR1",
58
eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2; VAR1") );
60
new TestCase( SECTION,
61
"VAR1 = 0; VAR2=NaN; VAR1 /= VAR2",
63
eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2") );
65
new TestCase( SECTION,
66
"VAR1 = 0; VAR2=NaN; VAR1 /= VAR2; VAR1",
68
eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2; VAR1") );
71
new TestCase( SECTION,
72
"VAR1 = 0; VAR2=1; VAR1 /= VAR2",
74
eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2") );
76
new TestCase( SECTION,
77
"VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1",
79
eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1") );
81
new TestCase( SECTION,
82
"VAR1 = 0xFF; VAR2 = 0xA, VAR1 /= VAR2",
84
eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 /= VAR2") );
86
// special division cases
88
new TestCase( SECTION,
89
"VAR1 = 0; VAR2= Infinity; VAR1 /= VAR2",
91
eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
93
new TestCase( SECTION,
94
"VAR1 = -0; VAR2= Infinity; VAR1 /= VAR2",
96
eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
98
new TestCase( SECTION,
99
"VAR1 = -0; VAR2= -Infinity; VAR1 /= VAR2",
101
eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
103
new TestCase( SECTION,
104
"VAR1 = 0; VAR2= -Infinity; VAR1 /= VAR2",
106
eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
108
new TestCase( SECTION,
109
"VAR1 = 0; VAR2= Infinity; VAR2 /= VAR1",
110
Number.POSITIVE_INFINITY,
111
eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") );
113
new TestCase( SECTION,
114
"VAR1 = -0; VAR2= Infinity; VAR2 /= VAR1",
115
Number.NEGATIVE_INFINITY,
116
eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") );
118
new TestCase( SECTION,
119
"VAR1 = -0; VAR2= -Infinity; VAR2 /= VAR1",
120
Number.POSITIVE_INFINITY,
121
eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") );
123
new TestCase( SECTION,
124
"VAR1 = 0; VAR2= -Infinity; VAR2 /= VAR1",
125
Number.NEGATIVE_INFINITY,
126
eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") );
128
new TestCase( SECTION,
129
"VAR1 = Infinity; VAR2= Infinity; VAR1 /= VAR2",
131
eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
133
new TestCase( SECTION,
134
"VAR1 = Infinity; VAR2= -Infinity; VAR1 /= VAR2",
136
eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
138
new TestCase( SECTION,
139
"VAR1 =-Infinity; VAR2= Infinity; VAR1 /= VAR2",
141
eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
143
new TestCase( SECTION,
144
"VAR1 =-Infinity; VAR2=-Infinity; VAR1 /= VAR2",
146
eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
148
new TestCase( SECTION,
149
"VAR1 = 0; VAR2= 0; VAR1 /= VAR2",
151
eval("VAR1 = 0; VAR2 = 0; VAR1 /= VAR2; VAR1") );
153
new TestCase( SECTION,
154
"VAR1 = 0; VAR2= -0; VAR1 /= VAR2",
156
eval("VAR1 = 0; VAR2 = -0; VAR1 /= VAR2; VAR1") );
158
new TestCase( SECTION,
159
"VAR1 = -0; VAR2= 0; VAR1 /= VAR2",
161
eval("VAR1 = -0; VAR2 = 0; VAR1 /= VAR2; VAR1") );
163
new TestCase( SECTION,
164
"VAR1 = -0; VAR2= -0; VAR1 /= VAR2",
166
eval("VAR1 = -0; VAR2 = -0; VAR1 /= VAR2; VAR1") );
168
new TestCase( SECTION,
169
"VAR1 = 1; VAR2= 0; VAR1 /= VAR2",
170
Number.POSITIVE_INFINITY,
171
eval("VAR1 = 1; VAR2 = 0; VAR1 /= VAR2; VAR1") );
173
new TestCase( SECTION,
174
"VAR1 = 1; VAR2= -0; VAR1 /= VAR2",
175
Number.NEGATIVE_INFINITY,
176
eval("VAR1 = 1; VAR2 = -0; VAR1 /= VAR2; VAR1") );
178
new TestCase( SECTION,
179
"VAR1 = -1; VAR2= 0; VAR1 /= VAR2",
180
Number.NEGATIVE_INFINITY,
181
eval("VAR1 = -1; VAR2 = 0; VAR1 /= VAR2; VAR1") );
183
new TestCase( SECTION,
184
"VAR1 = -1; VAR2= -0; VAR1 /= VAR2",
185
Number.POSITIVE_INFINITY,
186
eval("VAR1 = -1; VAR2 = -0; VAR1 /= VAR2; VAR1") );
189
new TestCase( SECTION,
190
"VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1",
192
eval("VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1") );
194
new TestCase( SECTION,
195
"VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1",
197
eval("VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1") );
199
new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2") );
200
new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") );
202
new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2") );
203
new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2") );
204
new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") );
207
new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 /= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 /= VAR2") );
208
new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 /= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 /= VAR2") );
211
new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2; VAR1") );
212
new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1") );
213
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") );
214
new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2") );