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