nashorn/test/script/basic/NASHORN-556.js
changeset 16147 e63b63819133
child 16151 97c1e756ae1e
--- /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();
+