|
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-1.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-1"; |
|
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 // number cases |
|
51 new TestCase( SECTION, |
|
52 "VAR1 = 0; VAR2=1; VAR1 *= VAR2", |
|
53 0, |
|
54 eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2") ); |
|
55 |
|
56 new TestCase( SECTION, |
|
57 "VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1", |
|
58 0, |
|
59 eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1") ); |
|
60 |
|
61 new TestCase( SECTION, |
|
62 "VAR1 = 0xFF; VAR2 = 0xA, VAR1 *= VAR2", |
|
63 2550, |
|
64 eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 *= VAR2") ); |
|
65 |
|
66 // special multiplication cases |
|
67 |
|
68 new TestCase( SECTION, |
|
69 "VAR1 = 0; VAR2= Infinity; VAR1 *= VAR2", |
|
70 Number.NaN, |
|
71 eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
72 |
|
73 new TestCase( SECTION, |
|
74 "VAR1 = -0; VAR2= Infinity; VAR1 *= VAR2", |
|
75 Number.NaN, |
|
76 eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
77 |
|
78 new TestCase( SECTION, |
|
79 "VAR1 = -0; VAR2= -Infinity; VAR1 *= VAR2", |
|
80 Number.NaN, |
|
81 eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
82 |
|
83 new TestCase( SECTION, |
|
84 "VAR1 = 0; VAR2= -Infinity; VAR1 *= VAR2", |
|
85 Number.NaN, |
|
86 eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
87 |
|
88 new TestCase( SECTION, |
|
89 "VAR1 = 0; VAR2= Infinity; VAR2 *= VAR1", |
|
90 Number.NaN, |
|
91 eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") ); |
|
92 |
|
93 new TestCase( SECTION, |
|
94 "VAR1 = -0; VAR2= Infinity; VAR2 *= VAR1", |
|
95 Number.NaN, |
|
96 eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") ); |
|
97 |
|
98 new TestCase( SECTION, |
|
99 "VAR1 = -0; VAR2= -Infinity; VAR2 *= VAR1", |
|
100 Number.NaN, |
|
101 eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") ); |
|
102 |
|
103 new TestCase( SECTION, |
|
104 "VAR1 = 0; VAR2= -Infinity; VAR2 *= VAR1", |
|
105 Number.NaN, |
|
106 eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") ); |
|
107 |
|
108 new TestCase( SECTION, |
|
109 "VAR1 = Infinity; VAR2= Infinity; VAR1 *= VAR2", |
|
110 Number.POSITIVE_INFINITY, |
|
111 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
112 |
|
113 new TestCase( SECTION, |
|
114 "VAR1 = Infinity; VAR2= -Infinity; VAR1 *= VAR2", |
|
115 Number.NEGATIVE_INFINITY, |
|
116 eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
117 |
|
118 new TestCase( SECTION, |
|
119 "VAR1 =-Infinity; VAR2= Infinity; VAR1 *= VAR2", |
|
120 Number.NEGATIVE_INFINITY, |
|
121 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
122 |
|
123 new TestCase( SECTION, |
|
124 "VAR1 =-Infinity; VAR2=-Infinity; VAR1 *= VAR2", |
|
125 Number.POSITIVE_INFINITY, |
|
126 eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); |
|
127 |
|
128 // string cases |
|
129 new TestCase( SECTION, |
|
130 "VAR1 = 10; VAR2 = '255', VAR1 *= VAR2", |
|
131 2550, |
|
132 eval("VAR1 = 10; VAR2 = '255', VAR1 *= VAR2") ); |
|
133 |
|
134 new TestCase( SECTION, |
|
135 "VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2", |
|
136 2550, |
|
137 eval("VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2") ); |
|
138 |
|
139 new TestCase( SECTION, |
|
140 "VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2", |
|
141 2550, |
|
142 eval("VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2") ); |
|
143 |
|
144 new TestCase( SECTION, |
|
145 "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2", |
|
146 2550, |
|
147 eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") ); |
|
148 |
|
149 new TestCase( SECTION, |
|
150 "VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2", |
|
151 2550, |
|
152 eval("VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2") ); |
|
153 |
|
154 new TestCase( SECTION, |
|
155 "VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2", |
|
156 2550, |
|
157 eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2") ); |
|
158 |
|
159 new TestCase( SECTION, |
|
160 "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2", |
|
161 2550, |
|
162 eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") ); |
|
163 |
|
164 // boolean cases |
|
165 new TestCase( SECTION, |
|
166 "VAR1 = true; VAR2 = false; VAR1 *= VAR2", |
|
167 0, |
|
168 eval("VAR1 = true; VAR2 = false; VAR1 *= VAR2") ); |
|
169 |
|
170 new TestCase( SECTION, |
|
171 "VAR1 = true; VAR2 = true; VAR1 *= VAR2", |
|
172 1, |
|
173 eval("VAR1 = true; VAR2 = true; VAR1 *= VAR2") ); |
|
174 |
|
175 // object cases |
|
176 new TestCase( SECTION, |
|
177 "VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2;VAR1", |
|
178 10, |
|
179 eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2; VAR1") ); |
|
180 |
|
181 new TestCase( SECTION, |
|
182 "VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1", |
|
183 110, |
|
184 eval("VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1") ); |
|
185 |
|
186 new TestCase( SECTION, |
|
187 "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2", |
|
188 110, |
|
189 eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2") ); |
|
190 |
|
191 new TestCase( SECTION, |
|
192 "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2", |
|
193 225, |
|
194 eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2") ); |
|
195 |
|
196 test(); |
|
197 |