|
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-2js |
|
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-2"; |
|
32 var VERSION = "ECMA_1"; |
|
33 startTest(); |
|
34 |
|
35 writeHeaderToLog( SECTION + " Compound Assignment: /="); |
|
36 |
|
37 |
|
38 // NaN cases |
|
39 |
|
40 new TestCase( SECTION, |
|
41 "VAR1 = NaN; VAR2=1; VAR1 /= VAR2", |
|
42 Number.NaN, |
|
43 eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2") ); |
|
44 |
|
45 new TestCase( SECTION, |
|
46 "VAR1 = NaN; VAR2=1; VAR1 /= VAR2; VAR1", |
|
47 Number.NaN, |
|
48 eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2; VAR1") ); |
|
49 |
|
50 new TestCase( SECTION, |
|
51 "VAR1 = NaN; VAR2=0; VAR1 /= VAR2", |
|
52 Number.NaN, |
|
53 eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2") ); |
|
54 |
|
55 new TestCase( SECTION, |
|
56 "VAR1 = NaN; VAR2=0; VAR1 /= VAR2; VAR1", |
|
57 Number.NaN, |
|
58 eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2; VAR1") ); |
|
59 |
|
60 new TestCase( SECTION, |
|
61 "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2", |
|
62 Number.NaN, |
|
63 eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2") ); |
|
64 |
|
65 new TestCase( SECTION, |
|
66 "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2; VAR1", |
|
67 Number.NaN, |
|
68 eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2; VAR1") ); |
|
69 |
|
70 // number cases |
|
71 new TestCase( SECTION, |
|
72 "VAR1 = 0; VAR2=1; VAR1 /= VAR2", |
|
73 0, |
|
74 eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2") ); |
|
75 |
|
76 new TestCase( SECTION, |
|
77 "VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1", |
|
78 0, |
|
79 eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1") ); |
|
80 |
|
81 new TestCase( SECTION, |
|
82 "VAR1 = 0xFF; VAR2 = 0xA, VAR1 /= VAR2", |
|
83 25.5, |
|
84 eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 /= VAR2") ); |
|
85 |
|
86 // special division cases |
|
87 |
|
88 new TestCase( SECTION, |
|
89 "VAR1 = 0; VAR2= Infinity; VAR1 /= VAR2", |
|
90 0, |
|
91 eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
92 |
|
93 new TestCase( SECTION, |
|
94 "VAR1 = -0; VAR2= Infinity; VAR1 /= VAR2", |
|
95 0, |
|
96 eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
97 |
|
98 new TestCase( SECTION, |
|
99 "VAR1 = -0; VAR2= -Infinity; VAR1 /= VAR2", |
|
100 0, |
|
101 eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
102 |
|
103 new TestCase( SECTION, |
|
104 "VAR1 = 0; VAR2= -Infinity; VAR1 /= VAR2", |
|
105 0, |
|
106 eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
107 |
|
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") ); |
|
112 |
|
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") ); |
|
117 |
|
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") ); |
|
122 |
|
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") ); |
|
127 |
|
128 new TestCase( SECTION, |
|
129 "VAR1 = Infinity; VAR2= Infinity; VAR1 /= VAR2", |
|
130 Number.NaN, |
|
131 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
132 |
|
133 new TestCase( SECTION, |
|
134 "VAR1 = Infinity; VAR2= -Infinity; VAR1 /= VAR2", |
|
135 Number.NaN, |
|
136 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
137 |
|
138 new TestCase( SECTION, |
|
139 "VAR1 =-Infinity; VAR2= Infinity; VAR1 /= VAR2", |
|
140 Number.NaN, |
|
141 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
142 |
|
143 new TestCase( SECTION, |
|
144 "VAR1 =-Infinity; VAR2=-Infinity; VAR1 /= VAR2", |
|
145 Number.NaN, |
|
146 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); |
|
147 |
|
148 new TestCase( SECTION, |
|
149 "VAR1 = 0; VAR2= 0; VAR1 /= VAR2", |
|
150 Number.NaN, |
|
151 eval("VAR1 = 0; VAR2 = 0; VAR1 /= VAR2; VAR1") ); |
|
152 |
|
153 new TestCase( SECTION, |
|
154 "VAR1 = 0; VAR2= -0; VAR1 /= VAR2", |
|
155 Number.NaN, |
|
156 eval("VAR1 = 0; VAR2 = -0; VAR1 /= VAR2; VAR1") ); |
|
157 |
|
158 new TestCase( SECTION, |
|
159 "VAR1 = -0; VAR2= 0; VAR1 /= VAR2", |
|
160 Number.NaN, |
|
161 eval("VAR1 = -0; VAR2 = 0; VAR1 /= VAR2; VAR1") ); |
|
162 |
|
163 new TestCase( SECTION, |
|
164 "VAR1 = -0; VAR2= -0; VAR1 /= VAR2", |
|
165 Number.NaN, |
|
166 eval("VAR1 = -0; VAR2 = -0; VAR1 /= VAR2; VAR1") ); |
|
167 |
|
168 new TestCase( SECTION, |
|
169 "VAR1 = 1; VAR2= 0; VAR1 /= VAR2", |
|
170 Number.POSITIVE_INFINITY, |
|
171 eval("VAR1 = 1; VAR2 = 0; VAR1 /= VAR2; VAR1") ); |
|
172 |
|
173 new TestCase( SECTION, |
|
174 "VAR1 = 1; VAR2= -0; VAR1 /= VAR2", |
|
175 Number.NEGATIVE_INFINITY, |
|
176 eval("VAR1 = 1; VAR2 = -0; VAR1 /= VAR2; VAR1") ); |
|
177 |
|
178 new TestCase( SECTION, |
|
179 "VAR1 = -1; VAR2= 0; VAR1 /= VAR2", |
|
180 Number.NEGATIVE_INFINITY, |
|
181 eval("VAR1 = -1; VAR2 = 0; VAR1 /= VAR2; VAR1") ); |
|
182 |
|
183 new TestCase( SECTION, |
|
184 "VAR1 = -1; VAR2= -0; VAR1 /= VAR2", |
|
185 Number.POSITIVE_INFINITY, |
|
186 eval("VAR1 = -1; VAR2 = -0; VAR1 /= VAR2; VAR1") ); |
|
187 |
|
188 // string cases |
|
189 new TestCase( SECTION, |
|
190 "VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1", |
|
191 100, |
|
192 eval("VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1") ); |
|
193 |
|
194 new TestCase( SECTION, |
|
195 "VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1", |
|
196 100, |
|
197 eval("VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1") ); |
|
198 /* |
|
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") ); |
|
201 |
|
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") ); |
|
205 |
|
206 // boolean cases |
|
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") ); |
|
209 |
|
210 // object cases |
|
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") ); |
|
215 |
|
216 */ |
|
217 |
|
218 test(); |
|
219 |