michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * michael@0: * Date: 29 Oct 2002 michael@0: * SUMMARY: Testing "use" and "set" operations on expressions like a[i][j][k] michael@0: * See http://bugzilla.mozilla.org/show_bug.cgi?id=96526#c52 michael@0: * michael@0: * Brendan: "The idea is to cover all the 'use' and 'set' (as in modify) michael@0: * operations you can do on an expression like a[i][j][k], including variations michael@0: * where you replace |a| with arguments (literally) and |i| with 0, 1, 2, etc. michael@0: * (to hit the optimization for arguments[0]... that uses JSOP_ARGSUB)." michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = 96526; michael@0: var summary = 'Testing "use" and "set" ops on expressions like a[i][j][k]'; michael@0: var status = ''; michael@0: var statusitems = []; michael@0: var actual = ''; michael@0: var actualvalues = []; michael@0: var expect= ''; michael@0: var expectedvalues = []; michael@0: michael@0: var z='magic'; michael@0: Number.prototype.magic=42; michael@0: f(2,1,[-1,0,[1,2,[3,4]]]); michael@0: michael@0: function f(j,k,a) michael@0: { michael@0: status = inSection(1); michael@0: actual = formatArray(a[2]); michael@0: expect = formatArray([1,2,[3,4]]); michael@0: addThis(); michael@0: michael@0: status = inSection(2); michael@0: actual = formatArray(a[2][j]); michael@0: expect = formatArray([3,4]); michael@0: addThis(); michael@0: michael@0: status = inSection(3); michael@0: actual = a[2][j][k]; michael@0: expect = 4; michael@0: addThis(); michael@0: michael@0: status = inSection(4); michael@0: actual = a[2][j][k][z]; michael@0: expect = 42; michael@0: addThis(); michael@0: michael@0: delete a[2][j][k]; michael@0: michael@0: status = inSection(5); michael@0: actual = formatArray(a[2][j]); michael@0: expect = '[3, ,]'; michael@0: addThis(); michael@0: } michael@0: michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: statusitems[UBound] = status; michael@0: actualvalues[UBound] = actual; michael@0: expectedvalues[UBound] = expect; michael@0: UBound++; michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus(summary); michael@0: michael@0: for (var i=0; i