aoqi@0: /* aoqi@0: * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: /* aoqi@0: * NASHORN-556: Need more tests to exercise code in jdk.nashorn.internal.runtime.array package. aoqi@0: * aoqi@0: * @test aoqi@0: * @run aoqi@0: */ aoqi@0: aoqi@0: function p() { aoqi@0: var s = ""; aoqi@0: for each (var i in arguments) { aoqi@0: s += ((i !== undefined) ? i : "") + ","; aoqi@0: } aoqi@0: s = s.length != 0 ? s.substr(0, s.length - 1) : s; aoqi@0: print(s); aoqi@0: } aoqi@0: aoqi@0: function assertEq(expected, actual) { aoqi@0: if (actual !== expected && !(isNaN(actual) && isNaN(expected))) { aoqi@0: throw "expected=" + expected + " actual=" + actual; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: function f1() { aoqi@0: // (NoTypeArrayData) aoqi@0: var empty = {}; aoqi@0: empty.length = 10; aoqi@0: Java.to(empty); aoqi@0: delete empty[0]; aoqi@0: Array.prototype.slice.call(empty, 0, 1); aoqi@0: Array.prototype.pop.call(empty); aoqi@0: Array.prototype.shift.call(empty); aoqi@0: empty = {}; aoqi@0: empty[0] = eval("84") >>> 1; assertEq(42, empty[0]); aoqi@0: empty = {}; aoqi@0: Array.prototype.unshift.call(empty, "x"); assertEq("x", empty[0]); aoqi@0: empty = {}; aoqi@0: empty[0] = 8.4; assertEq(8.4, empty[0]); aoqi@0: } aoqi@0: aoqi@0: function f2() { aoqi@0: // DeletedArrayFilter aoqi@0: var deleted = [,1,,2,,3,,4,,]; aoqi@0: assertEq(2, Java.to(deleted)[3]); aoqi@0: assertEq(undefined, deleted.pop()); aoqi@0: assertEq(4, deleted.pop()); aoqi@0: deleted.unshift(5); aoqi@0: p.apply(null, deleted); aoqi@0: assertEq(5, deleted.shift()); aoqi@0: print(deleted.slice(0,3), deleted.slice(1,7)); aoqi@0: assertEq(1, deleted[3] >>> 1); aoqi@0: deleted[3] = eval("84") >>> 1; assertEq(42, deleted[3]); aoqi@0: p.apply(null, deleted); aoqi@0: } aoqi@0: aoqi@0: function f3() { aoqi@0: // DeletedRangeArrayFilter aoqi@0: var delrange = [1,2,3,,,,,,,,,,]; aoqi@0: Java.to(delrange); aoqi@0: delrange.unshift(4); aoqi@0: p.apply(null, delrange); aoqi@0: print(delrange.slice(1,3), delrange.slice(2,6)); aoqi@0: assertEq(4, delrange.shift()); aoqi@0: } aoqi@0: aoqi@0: function f4() { aoqi@0: // NumberArrayData aoqi@0: var num = [1.1,2.2,3.3,4.4,5.5]; aoqi@0: Java.to(num); aoqi@0: assertEq(2, num[3] >>> 1); aoqi@0: assertEq(5, num[4] | 0); aoqi@0: assertEq(5.5, num.pop()); aoqi@0: num.unshift(13.37); aoqi@0: print(num.slice(1,4)); aoqi@0: assertEq(13.37, num.shift()); aoqi@0: p.apply(null, num); aoqi@0: num.length = 20; aoqi@0: delete num[0]; aoqi@0: num[0] = eval("14") >>> 1; aoqi@0: } aoqi@0: aoqi@0: function f5() { aoqi@0: // ObjectArrayData aoqi@0: var obj = [2,"two",3.14,"pi",14,"fourteen"]; aoqi@0: Java.to(obj); aoqi@0: assertEq(-12.86, obj[2] - 16); aoqi@0: assertEq(7, obj[4] >>> 1); aoqi@0: obj.unshift("one"); aoqi@0: obj[0] = 1.3; aoqi@0: obj[0] = eval("14") >>> 1; aoqi@0: assertEq(7, obj.shift()); aoqi@0: p.apply(null, obj); aoqi@0: } aoqi@0: aoqi@0: function f6() { aoqi@0: // SparseArrayData aoqi@0: var sparse = [9,8,7,6,5,4,3,2,1]; aoqi@0: sparse[0x76543210] = 84; aoqi@0: assertEq(42, sparse[0x76543210] >>> 1); aoqi@0: assertEq(42, sparse[0x76543210] - 42); aoqi@0: assertEq(85, sparse[0x76543210] | 1); aoqi@0: sparse[0x76543210] = 7.2; aoqi@0: sparse[0x76543210] = eval("84") >>> 1; aoqi@0: sparse.unshift(10); aoqi@0: print(sparse.slice(0,12)); aoqi@0: print(sparse.slice(0x76543209, 0x76543213)); aoqi@0: assertEq(10, sparse.shift()); aoqi@0: assertEq(42, sparse.pop()); aoqi@0: sparse.length = 1024*1024; aoqi@0: sparse.push(sparse.length); aoqi@0: delete sparse[sparse.length-1]; aoqi@0: //print(Java.to(sparse).length); aoqi@0: (function(){}).apply(null, sparse); aoqi@0: } aoqi@0: aoqi@0: function f7() { aoqi@0: // UndefinedArrayFilter aoqi@0: var undef = [1,2,3,4,5,undefined,7,8,9,19]; aoqi@0: Java.to(undef); aoqi@0: assertEq(4, undef[8] >>> 1); aoqi@0: var tmp = undef[9] >>> 1; aoqi@0: undef[8] = tmp; aoqi@0: undef.unshift(21); aoqi@0: print(undef.slice(0, 4), undef.slice(4, 5)); aoqi@0: assertEq(21, undef.shift()); aoqi@0: undef.push(20); aoqi@0: assertEq(20, undef.pop()); aoqi@0: assertEq(19, undef.pop()); aoqi@0: p.apply(null, undef); aoqi@0: undef.length = 20; aoqi@0: } aoqi@0: aoqi@0: function f8() { aoqi@0: // LongArrayData aoqi@0: var j = Java.from(Java.to([23,37,42,86,47], "long[]")); aoqi@0: Java.to(j); aoqi@0: p.apply(null, j); aoqi@0: assertEq(43, j[3] >>> 1); aoqi@0: assertEq(36, j[4] - 11); aoqi@0: j.unshift(eval("14") >>> 1); aoqi@0: print(j.slice(0,4)); aoqi@0: assertEq(7, j.shift()); aoqi@0: assertEq(47, j.pop()); aoqi@0: j.push("asdf"); aoqi@0: j = Java.from(Java.to([23,37,42,86,47], "long[]")); aoqi@0: j.length = 3; aoqi@0: j[0] = 13; aoqi@0: j = Java.from(Java.to([23,37,42,86,47], "long[]")); aoqi@0: delete j[0]; aoqi@0: j = Java.from(Java.to([23,37,42,86,47], "long[]")); aoqi@0: j.length = 20; aoqi@0: j[0] = 13.37; aoqi@0: } aoqi@0: aoqi@0: function f9() { aoqi@0: // FrozenArrayFilter aoqi@0: var a1 = [10,11,12,13,14,15]; aoqi@0: Object.freeze(a1); aoqi@0: assertEq(true, Object.isFrozen(a1)); aoqi@0: Object.getOwnPropertyDescriptor(a1, 0); aoqi@0: a1[1] = 1; aoqi@0: a1[2] = eval("14") >>> 1; aoqi@0: a1[3] = 3.14; aoqi@0: a1[4] = "asdf"; aoqi@0: print(a1.slice(1,4)); aoqi@0: a1.length = 20; aoqi@0: } aoqi@0: aoqi@0: function f10() { aoqi@0: // SealedArrayFilter aoqi@0: var a1 = [10,11,12,13,14,15]; aoqi@0: Object.seal(a1); aoqi@0: assertEq(true, Object.isSealed(a1)); aoqi@0: Object.getOwnPropertyDescriptor(a1, 0); aoqi@0: a1[1] = 1; aoqi@0: a1[2] = eval("14") >>> 1; aoqi@0: a1[3] = 3.14; aoqi@0: a1[4] = "asdf"; aoqi@0: print(a1.slice(1,4)); aoqi@0: delete a1[0]; aoqi@0: a1.length = 20; aoqi@0: } aoqi@0: aoqi@0: f1(); aoqi@0: f2(); aoqi@0: f3(); aoqi@0: f4(); aoqi@0: f5(); aoqi@0: f6(); aoqi@0: f7(); aoqi@0: f8(); aoqi@0: f9(); aoqi@0: f10(); aoqi@0: