test/script/basic/JDK-8061391.js

Tue, 21 Mar 2017 13:41:57 -0700

author
asaha
date
Tue, 21 Mar 2017 13:41:57 -0700
changeset 2160
1df40fe54cd6
parent 1071
78eb2b415108
permissions
-rw-r--r--

Merge

lagergren@1071 1 /*
lagergren@1071 2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
lagergren@1071 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
lagergren@1071 4 *
lagergren@1071 5 * This code is free software; you can redistribute it and/or modify it
lagergren@1071 6 * under the terms of the GNU General Public License version 2 only, as
lagergren@1071 7 * published by the Free Software Foundation.
lagergren@1071 8 *
lagergren@1071 9 * This code is distributed in the hope that it will be useful, but WITHOUT
lagergren@1071 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
lagergren@1071 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
lagergren@1071 12 * version 2 for more details (a copy is included in the LICENSE file that
lagergren@1071 13 * accompanied this code).
lagergren@1071 14 *
lagergren@1071 15 * You should have received a copy of the GNU General Public License version
lagergren@1071 16 * 2 along with this work; if not, write to the Free Software Foundation,
lagergren@1071 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
lagergren@1071 18 *
lagergren@1071 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
lagergren@1071 20 * or visit www.oracle.com if you need additional information or have any
lagergren@1071 21 * questions.
lagergren@1071 22 */
lagergren@1071 23
lagergren@1071 24 /**
lagergren@1071 25 * JDK-8061391 - Checks that the optimistic builtin for concat is semantically
lagergren@1071 26 * correct.
lagergren@1071 27 *
lagergren@1071 28 * @test
lagergren@1071 29 * @run
lagergren@1071 30 */
lagergren@1071 31
lagergren@1071 32 var maxJavaInt = 0x7fffffff;
lagergren@1071 33
lagergren@1071 34 var ia = [1, 2, 3, 4];
lagergren@1071 35 var la = [maxJavaInt + 1000, maxJavaInt + 2000, maxJavaInt + 3000, maxJavaInt + 4000];
lagergren@1071 36 var da = [1.1, 2.2, 3.3, 4.4];
lagergren@1071 37 var oa = ["one", "two", "three", "four"];
lagergren@1071 38
lagergren@1071 39 var aa = [ia, la, da, oa];
lagergren@1071 40
lagergren@1071 41 function concats() {
lagergren@1071 42 print("shared callsite");
lagergren@1071 43
lagergren@1071 44 print(ia);
lagergren@1071 45 print(la);
lagergren@1071 46 print(da);
lagergren@1071 47 print(oa);
lagergren@1071 48 print(aa);
lagergren@1071 49
lagergren@1071 50 for (var i = 0; i < aa.length; i++) {
lagergren@1071 51 print(aa[i].concat(aa[i][0]));
lagergren@1071 52 for (var j = 0; j < aa.length ; j++) {
lagergren@1071 53 print(aa[i].concat(aa[j]));
lagergren@1071 54 }
lagergren@1071 55 }
lagergren@1071 56 }
lagergren@1071 57
lagergren@1071 58 function concats_inline() {
lagergren@1071 59 print("separate callsites");
lagergren@1071 60
lagergren@1071 61 print(ia);
lagergren@1071 62 print(la);
lagergren@1071 63 print(da);
lagergren@1071 64 print(oa);
lagergren@1071 65 print(aa);
lagergren@1071 66
lagergren@1071 67 print(aa[0].concat(aa[0]));
lagergren@1071 68 print(aa[0].concat(aa[1]));
lagergren@1071 69 print(aa[0].concat(aa[2]));
lagergren@1071 70 print(aa[0].concat(aa[3]));
lagergren@1071 71 print(aa[0].concat(aa[0][0]));
lagergren@1071 72
lagergren@1071 73 print(aa[1].concat(aa[0]));
lagergren@1071 74 print(aa[1].concat(aa[1]));
lagergren@1071 75 print(aa[1].concat(aa[2]));
lagergren@1071 76 print(aa[1].concat(aa[3]));
lagergren@1071 77 print(aa[1].concat(aa[1][0]));
lagergren@1071 78
lagergren@1071 79 print(aa[2].concat(aa[0]));
lagergren@1071 80 print(aa[2].concat(aa[1]));
lagergren@1071 81 print(aa[2].concat(aa[2]));
lagergren@1071 82 print(aa[2].concat(aa[3]));
lagergren@1071 83 print(aa[2].concat(aa[2][0]));
lagergren@1071 84
lagergren@1071 85 print(aa[3].concat(aa[0]));
lagergren@1071 86 print(aa[3].concat(aa[1]));
lagergren@1071 87 print(aa[3].concat(aa[2]));
lagergren@1071 88 print(aa[3].concat(aa[3]));
lagergren@1071 89 print(aa[3].concat(aa[3][0]));
lagergren@1071 90 }
lagergren@1071 91
lagergren@1071 92 concats();
lagergren@1071 93 concats_inline();
lagergren@1071 94
lagergren@1071 95 print();
lagergren@1071 96 var oldia = ia.slice(0); //clone ia
lagergren@1071 97 print("oldia = " + oldia);
lagergren@1071 98 ia[10] = "sparse";
lagergren@1071 99 print("oldia = " + oldia);
lagergren@1071 100
lagergren@1071 101 print();
lagergren@1071 102 print("Redoing with sparse arrays");
lagergren@1071 103
lagergren@1071 104 concats();
lagergren@1071 105 concats_inline();
lagergren@1071 106
lagergren@1071 107 ia = oldia;
lagergren@1071 108 print("Restored ia = " + ia);
lagergren@1071 109
lagergren@1071 110 function concat_expand() {
lagergren@1071 111 print("concat type expansion");
lagergren@1071 112 print(ia.concat(la));
lagergren@1071 113 print(ia.concat(da));
lagergren@1071 114 print(ia.concat(oa));
lagergren@1071 115 print(la.concat(ia));
lagergren@1071 116 print(la.concat(da));
lagergren@1071 117 print(la.concat(oa));
lagergren@1071 118 print(da.concat(ia));
lagergren@1071 119 print(da.concat(la));
lagergren@1071 120 print(da.concat(oa));
lagergren@1071 121 }
lagergren@1071 122
lagergren@1071 123 print();
lagergren@1071 124 concat_expand();
lagergren@1071 125
lagergren@1071 126 print();
lagergren@1071 127
lagergren@1071 128 function concat_varargs() {
lagergren@1071 129 print("concat varargs");
lagergren@1071 130 print(ia.concat(la)); //fast
lagergren@1071 131 print(ia.concat(la, da, oa)); //slow
lagergren@1071 132 var slow = ia.concat(1, maxJavaInt * 2, 4711.17, function() { print("hello, world") }); //slow
lagergren@1071 133 print(slow);
lagergren@1071 134 return slow;
lagergren@1071 135 }
lagergren@1071 136
lagergren@1071 137 var slow = concat_varargs();
lagergren@1071 138
lagergren@1071 139 print();
lagergren@1071 140 print("sanity checks");
lagergren@1071 141 slow.map(
lagergren@1071 142 function(elem) {
lagergren@1071 143 if (elem instanceof Function) {
lagergren@1071 144 elem();
lagergren@1071 145 } else {
lagergren@1071 146 print((typeof elem) + " = " + elem);
lagergren@1071 147 }
lagergren@1071 148 });
lagergren@1071 149
lagergren@1071 150 print(ia.concat({key: "value"}));
lagergren@1071 151 print(ia.concat({key: "value"}, {key2: "value2"}));

mercurial