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: * Date: 24 September 2001 michael@0: * michael@0: * SUMMARY: Truncating arrays that have decimal property names. michael@0: * From correspondence with Igor Bukanov : michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = '(none)'; michael@0: var summary = 'Truncating arrays that have decimal property names'; michael@0: var BIG_INDEX = 4294967290; 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: michael@0: var arr = Array(BIG_INDEX); michael@0: arr[BIG_INDEX - 1] = 'a'; michael@0: arr[BIG_INDEX - 10000] = 'b'; michael@0: arr[BIG_INDEX - 0.5] = 'c'; // not an array index - but a valid property name michael@0: // Truncate the array - michael@0: arr.length = BIG_INDEX - 5000; michael@0: michael@0: michael@0: // Enumerate its properties with for..in michael@0: var s = ''; michael@0: for (var i in arr) michael@0: { michael@0: s += arr[i]; michael@0: } michael@0: michael@0: michael@0: /* michael@0: * We expect s == 'cb' or 'bc' (EcmaScript does not fix the order). michael@0: * Note 'c' is included: for..in includes ALL enumerable properties, michael@0: * not just array-index properties. The bug was: Rhino gave s == ''. michael@0: */ michael@0: status = inSection(1); michael@0: actual = sortThis(s); michael@0: expect = 'bc'; michael@0: addThis(); michael@0: michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: function sortThis(str) michael@0: { michael@0: var chars = str.split(''); michael@0: chars = chars.sort(); michael@0: return chars.join(''); 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