1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma/Expressions/11.13.2-3.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,266 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 + 1.10 +/** 1.11 + File Name: 11.13.2-4.js 1.12 + ECMA Section: 11.13.2 Compound Assignment: %= 1.13 + Description: 1.14 + 1.15 + *= /= %= += -= <<= >>= >>>= &= ^= |= 1.16 + 1.17 + 11.13.2 Compound assignment ( op= ) 1.18 + 1.19 + The production AssignmentExpression : 1.20 + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of 1.21 + the operators indicated above, is evaluated as follows: 1.22 + 1.23 + 1. Evaluate LeftHandSideExpression. 1.24 + 2. Call GetValue(Result(1)). 1.25 + 3. Evaluate AssignmentExpression. 1.26 + 4. Call GetValue(Result(3)). 1.27 + 5. Apply operator @ to Result(2) and Result(4). 1.28 + 6. Call PutValue(Result(1), Result(5)). 1.29 + 7. Return Result(5). 1.30 + 1.31 + Author: christine@netscape.com 1.32 + Date: 12 november 1997 1.33 +*/ 1.34 +var SECTION = "11.13.2-3"; 1.35 +var VERSION = "ECMA_1"; 1.36 +startTest(); 1.37 + 1.38 +writeHeaderToLog( SECTION + " Compound Assignment: +="); 1.39 + 1.40 +// If either operand is NaN, result is NaN 1.41 + 1.42 +new TestCase( SECTION, 1.43 + "VAR1 = NaN; VAR2=1; VAR1 %= VAR2", 1.44 + Number.NaN, 1.45 + eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2") ); 1.46 + 1.47 +new TestCase( SECTION, 1.48 + "VAR1 = NaN; VAR2=1; VAR1 %= VAR2; VAR1", 1.49 + Number.NaN, 1.50 + eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2; VAR1") ); 1.51 + 1.52 +new TestCase( SECTION, 1.53 + "VAR1 = NaN; VAR2=0; VAR1 %= VAR2", 1.54 + Number.NaN, 1.55 + eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2") ); 1.56 + 1.57 +new TestCase( SECTION, 1.58 + "VAR1 = NaN; VAR2=0; VAR1 %= VAR2; VAR1", 1.59 + Number.NaN, 1.60 + eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2; VAR1") ); 1.61 + 1.62 +new TestCase( SECTION, 1.63 + "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2", 1.64 + Number.NaN, 1.65 + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2") ); 1.66 + 1.67 +new TestCase( SECTION, 1.68 + "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2; VAR1", 1.69 + Number.NaN, 1.70 + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2; VAR1") ); 1.71 + 1.72 +// if the dividend is infinity or the divisor is zero or both, the result is NaN 1.73 + 1.74 +new TestCase( SECTION, 1.75 + "VAR1 = Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", 1.76 + Number.NaN, 1.77 + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.78 + 1.79 +new TestCase( SECTION, 1.80 + "VAR1 = Infinity; VAR2= -Infinity; VAR1 %= VAR2; VAR1", 1.81 + Number.NaN, 1.82 + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.83 + 1.84 +new TestCase( SECTION, 1.85 + "VAR1 =-Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", 1.86 + Number.NaN, 1.87 + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.88 + 1.89 +new TestCase( SECTION, 1.90 + "VAR1 =-Infinity; VAR2=-Infinity; VAR1 %= VAR2; VAR1", 1.91 + Number.NaN, 1.92 + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.93 + 1.94 +new TestCase( SECTION, 1.95 + "VAR1 = 0; VAR2= Infinity; VAR2 %= VAR1", 1.96 + Number.NaN, 1.97 + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.98 + 1.99 +new TestCase( SECTION, 1.100 + "VAR1 = -0; VAR2= Infinity; VAR2 %= VAR1", 1.101 + Number.NaN, 1.102 + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.103 + 1.104 +new TestCase( SECTION, 1.105 + "VAR1 = -0; VAR2= -Infinity; VAR2 %= VAR1", 1.106 + Number.NaN, 1.107 + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.108 + 1.109 +new TestCase( SECTION, 1.110 + "VAR1 = 0; VAR2= -Infinity; VAR2 %= VAR1", 1.111 + Number.NaN, 1.112 + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.113 + 1.114 +new TestCase( SECTION, 1.115 + "VAR1 = 1; VAR2= Infinity; VAR2 %= VAR1", 1.116 + Number.NaN, 1.117 + eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.118 + 1.119 +new TestCase( SECTION, 1.120 + "VAR1 = -1; VAR2= Infinity; VAR2 %= VAR1", 1.121 + Number.NaN, 1.122 + eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.123 + 1.124 +new TestCase( SECTION, 1.125 + "VAR1 = -1; VAR2= -Infinity; VAR2 %= VAR1", 1.126 + Number.NaN, 1.127 + eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.128 + 1.129 +new TestCase( SECTION, 1.130 + "VAR1 = 1; VAR2= -Infinity; VAR2 %= VAR1", 1.131 + Number.NaN, 1.132 + eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); 1.133 + 1.134 +new TestCase( SECTION, 1.135 + "VAR1 = 0; VAR2= 0; VAR1 %= VAR2", 1.136 + Number.NaN, 1.137 + eval("VAR1 = 0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); 1.138 + 1.139 +new TestCase( SECTION, 1.140 + "VAR1 = 0; VAR2= -0; VAR1 %= VAR2", 1.141 + Number.NaN, 1.142 + eval("VAR1 = 0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); 1.143 + 1.144 +new TestCase( SECTION, 1.145 + "VAR1 = -0; VAR2= 0; VAR1 %= VAR2", 1.146 + Number.NaN, 1.147 + eval("VAR1 = -0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); 1.148 + 1.149 +new TestCase( SECTION, 1.150 + "VAR1 = -0; VAR2= -0; VAR1 %= VAR2", 1.151 + Number.NaN, 1.152 + eval("VAR1 = -0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); 1.153 + 1.154 +new TestCase( SECTION, 1.155 + "VAR1 = 1; VAR2= 0; VAR1 %= VAR2", 1.156 + Number.NaN, 1.157 + eval("VAR1 = 1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); 1.158 + 1.159 +new TestCase( SECTION, 1.160 + "VAR1 = 1; VAR2= -0; VAR1 %= VAR2", 1.161 + Number.NaN, 1.162 + eval("VAR1 = 1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); 1.163 + 1.164 +new TestCase( SECTION, 1.165 + "VAR1 = -1; VAR2= 0; VAR1 %= VAR2", 1.166 + Number.NaN, 1.167 + eval("VAR1 = -1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); 1.168 + 1.169 +new TestCase( SECTION, 1.170 + "VAR1 = -1; VAR2= -0; VAR1 %= VAR2", 1.171 + Number.NaN, 1.172 + eval("VAR1 = -1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); 1.173 + 1.174 +// if the dividend is finite and the divisor is an infinity, the result equals the dividend. 1.175 + 1.176 +new TestCase( SECTION, 1.177 + "VAR1 = 0; VAR2= Infinity; VAR1 %= VAR2;VAR1", 1.178 + 0, 1.179 + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.180 + 1.181 +new TestCase( SECTION, 1.182 + "VAR1 = -0; VAR2= Infinity; VAR1 %= VAR2;VAR1", 1.183 + -0, 1.184 + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.185 + 1.186 +new TestCase( SECTION, 1.187 + "VAR1 = -0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", 1.188 + -0, 1.189 + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.190 + 1.191 +new TestCase( SECTION, 1.192 + "VAR1 = 0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", 1.193 + 0, 1.194 + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.195 + 1.196 +new TestCase( SECTION, 1.197 + "VAR1 = 1; VAR2= Infinity; VAR1 %= VAR2;VAR1", 1.198 + 1, 1.199 + eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.200 + 1.201 +new TestCase( SECTION, 1.202 + "VAR1 = -1; VAR2= Infinity; VAR1 %= VAR2;VAR1", 1.203 + -1, 1.204 + eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.205 + 1.206 +new TestCase( SECTION, 1.207 + "VAR1 = -1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", 1.208 + -1, 1.209 + eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.210 + 1.211 +new TestCase( SECTION, 1.212 + "VAR1 = 1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", 1.213 + 1, 1.214 + eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); 1.215 + 1.216 +// if the dividend is a zero and the divisor is finite, the result is the same as the dividend 1.217 + 1.218 +new TestCase( SECTION, 1.219 + "VAR1 = 0; VAR2= 1; VAR1 %= VAR2; VAR1", 1.220 + 0, 1.221 + eval("VAR1 = 0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); 1.222 + 1.223 +new TestCase( SECTION, 1.224 + "VAR1 = -0; VAR2= 1; VAR1 %= VAR2; VAR1", 1.225 + -0, 1.226 + eval("VAR1 = -0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); 1.227 + 1.228 +new TestCase( SECTION, 1.229 + "VAR1 = -0; VAR2= -1; VAR1 %= VAR2; VAR1", 1.230 + -0, 1.231 + eval("VAR1 = -0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); 1.232 + 1.233 +new TestCase( SECTION, 1.234 + "VAR1 = 0; VAR2= -1; VAR1 %= VAR2; VAR1", 1.235 + 0, 1.236 + eval("VAR1 = 0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); 1.237 + 1.238 +// string cases 1.239 +new TestCase( SECTION, 1.240 + "VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1", 1.241 + 0, 1.242 + eval("VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1") ); 1.243 + 1.244 +new TestCase( SECTION, 1.245 + "VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1", 1.246 + 0, 1.247 + eval("VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1") ); 1.248 +/* 1.249 + new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2") ); 1.250 + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); 1.251 + 1.252 + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2") ); 1.253 + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2") ); 1.254 + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); 1.255 + 1.256 + // boolean cases 1.257 + new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 %= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 %= VAR2") ); 1.258 + new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 %= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 %= VAR2") ); 1.259 + 1.260 + // object cases 1.261 + new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2; VAR1") ); 1.262 + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1") ); 1.263 + 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") ); 1.264 + new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2") ); 1.265 + 1.266 +*/ 1.267 + 1.268 +test(); 1.269 +