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