JDK-8061391.js revision 1073:06c06c8443fd
1251839Sbapt/* 2255852Sdteske * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 3251839Sbapt * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4251839Sbapt * 5251839Sbapt * This code is free software; you can redistribute it and/or modify it 6251839Sbapt * under the terms of the GNU General Public License version 2 only, as 7251839Sbapt * published by the Free Software Foundation. 8251839Sbapt * 9251839Sbapt * This code is distributed in the hope that it will be useful, but WITHOUT 10251839Sbapt * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11251839Sbapt * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12251839Sbapt * version 2 for more details (a copy is included in the LICENSE file that 13251839Sbapt * accompanied this code). 14251839Sbapt * 15251839Sbapt * You should have received a copy of the GNU General Public License version 16251839Sbapt * 2 along with this work; if not, write to the Free Software Foundation, 17251839Sbapt * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18251839Sbapt * 19251839Sbapt * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20251839Sbapt * or visit www.oracle.com if you need additional information or have any 21251839Sbapt * questions. 22251839Sbapt */ 23251839Sbapt 24251839Sbapt/** 25251839Sbapt * JDK-8061391 - Checks that the optimistic builtin for concat is semantically 26251839Sbapt * correct. 27251839Sbapt * 28251839Sbapt * @test 29251839Sbapt * @run 30251839Sbapt */ 31251839Sbapt 32251839Sbaptvar maxJavaInt = 0x7fffffff; 33251839Sbapt 34251839Sbaptvar ia = [1, 2, 3, 4]; 35251839Sbaptvar la = [maxJavaInt + 1000, maxJavaInt + 2000, maxJavaInt + 3000, maxJavaInt + 4000]; 36251839Sbaptvar da = [1.1, 2.2, 3.3, 4.4]; 37251839Sbaptvar oa = ["one", "two", "three", "four"]; 38251839Sbapt 39251839Sbaptvar aa = [ia, la, da, oa]; 40251839Sbapt 41251839Sbaptfunction concats() { 42251839Sbapt print("shared callsite"); 43251839Sbapt 44251839Sbapt print(ia); 45251839Sbapt print(la); 46251839Sbapt print(da); 47251839Sbapt print(oa); 48251839Sbapt print(aa); 49251839Sbapt 50251839Sbapt for (var i = 0; i < aa.length; i++) { 51251839Sbapt print(aa[i].concat(aa[i][0])); 52251839Sbapt for (var j = 0; j < aa.length ; j++) { 53251839Sbapt print(aa[i].concat(aa[j])); 54251839Sbapt } 55251839Sbapt } 56251839Sbapt} 57251839Sbapt 58251839Sbaptfunction concats_inline() { 59251839Sbapt print("separate callsites"); 60251839Sbapt 61251839Sbapt print(ia); 62251839Sbapt print(la); 63251839Sbapt print(da); 64251839Sbapt print(oa); 65251839Sbapt print(aa); 66251839Sbapt 67251839Sbapt print(aa[0].concat(aa[0])); 68251839Sbapt print(aa[0].concat(aa[1])); 69251839Sbapt print(aa[0].concat(aa[2])); 70251839Sbapt print(aa[0].concat(aa[3])); 71251839Sbapt print(aa[0].concat(aa[0][0])); 72251839Sbapt 73251839Sbapt print(aa[1].concat(aa[0])); 74251839Sbapt print(aa[1].concat(aa[1])); 75251839Sbapt print(aa[1].concat(aa[2])); 76251839Sbapt print(aa[1].concat(aa[3])); 77251839Sbapt print(aa[1].concat(aa[1][0])); 78251839Sbapt 79251839Sbapt print(aa[2].concat(aa[0])); 80251839Sbapt print(aa[2].concat(aa[1])); 81251839Sbapt print(aa[2].concat(aa[2])); 82251839Sbapt print(aa[2].concat(aa[3])); 83251839Sbapt print(aa[2].concat(aa[2][0])); 84251839Sbapt 85251839Sbapt print(aa[3].concat(aa[0])); 86251839Sbapt print(aa[3].concat(aa[1])); 87251839Sbapt print(aa[3].concat(aa[2])); 88251839Sbapt print(aa[3].concat(aa[3])); 89251839Sbapt print(aa[3].concat(aa[3][0])); 90251839Sbapt} 91251839Sbapt 92251839Sbaptconcats(); 93251839Sbaptconcats_inline(); 94251839Sbapt 95251839Sbaptprint(); 96251839Sbaptvar oldia = ia.slice(0); //clone ia 97251839Sbaptprint("oldia = " + oldia); 98251839Sbaptia[10] = "sparse"; 99251839Sbaptprint("oldia = " + oldia); 100251839Sbapt 101251839Sbaptprint(); 102251839Sbaptprint("Redoing with sparse arrays"); 103251839Sbapt 104251839Sbaptconcats(); 105251839Sbaptconcats_inline(); 106251839Sbapt 107251839Sbaptia = oldia; 108251839Sbaptprint("Restored ia = " + ia); 109251839Sbapt 110251839Sbaptfunction concat_expand() { 111251839Sbapt print("concat type expansion"); 112251839Sbapt print(ia.concat(la)); 113251839Sbapt print(ia.concat(da)); 114251839Sbapt print(ia.concat(oa)); 115251839Sbapt print(la.concat(ia)); 116251839Sbapt print(la.concat(da)); 117251839Sbapt print(la.concat(oa)); 118251839Sbapt print(da.concat(ia)); 119251839Sbapt print(da.concat(la)); 120251839Sbapt print(da.concat(oa)); 121251839Sbapt} 122251839Sbapt 123251839Sbaptprint(); 124251839Sbaptconcat_expand(); 125251839Sbapt 126251839Sbaptprint(); 127251839Sbapt 128251839Sbaptfunction concat_varargs() { 129251839Sbapt print("concat varargs"); 130251839Sbapt print(ia.concat(la)); //fast 131251839Sbapt print(ia.concat(la, da, oa)); //slow 132251839Sbapt var slow = ia.concat(1, maxJavaInt * 2, 4711.17, function() { print("hello, world") }); //slow 133251839Sbapt print(slow); 134251839Sbapt return slow; 135251839Sbapt} 136251839Sbapt 137251839Sbaptvar slow = concat_varargs(); 138251839Sbapt 139251839Sbaptprint(); 140251839Sbaptprint("sanity checks"); 141251839Sbaptslow.map( 142251839Sbapt function(elem) { 143251839Sbapt if (elem instanceof Function) { 144251839Sbapt elem(); 145251839Sbapt } else { 146251839Sbapt print((typeof elem) + " = " + elem); 147251839Sbapt } 148251839Sbapt }); 149251839Sbapt 150251839Sbaptprint(ia.concat({key: "value"})); 151251839Sbaptprint(ia.concat({key: "value"}, {key2: "value2"})); 152251839Sbapt