1 /* 2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /** 25 * @test 26 * @summary Test the boundary values for concatenation arguments. 27 * 28 * @compile ImplicitStringConcatBoundaries.java 29 * @run main/othervm -Xverify:all ImplicitStringConcatBoundaries 30 * 31 * @compile -XDstringConcat=inline ImplicitStringConcatBoundaries.java 32 * @run main/othervm -Xverify:all ImplicitStringConcatBoundaries 33 * 34 * @compile -XDstringConcat=indy ImplicitStringConcatBoundaries.java 35 * 36 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB ImplicitStringConcatBoundaries 37 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED ImplicitStringConcatBoundaries 38 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED ImplicitStringConcatBoundaries 39 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT ImplicitStringConcatBoundaries 40 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT ImplicitStringConcatBoundaries 41 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT ImplicitStringConcatBoundaries 42 * 43 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 44 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 45 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 46 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 47 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 48 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 49 * 50 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 51 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 52 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 53 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 54 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 55 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 56 57 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 58 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 59 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 60 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 61 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 62 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 63 * 64 * @compile -XDstringConcat=indyWithConstants ImplicitStringConcatBoundaries.java 65 * 66 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB ImplicitStringConcatBoundaries 67 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED ImplicitStringConcatBoundaries 68 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED ImplicitStringConcatBoundaries 69 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT ImplicitStringConcatBoundaries 70 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT ImplicitStringConcatBoundaries 71 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT ImplicitStringConcatBoundaries 72 * 73 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 74 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 75 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 76 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 77 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 78 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true ImplicitStringConcatBoundaries 79 * 80 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 81 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 82 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 83 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 84 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 85 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 86 * 87 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 88 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 89 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 90 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 91 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 92 * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true -Djava.lang.invoke.stringConcat.cache=true ImplicitStringConcatBoundaries 93 94 */ 95 96 public class ImplicitStringConcatBoundaries { 97 98 public static final boolean BOOL_TRUE_1 = true; 99 public static boolean BOOL_TRUE_2 = true; 100 public static final boolean BOOL_FALSE_1 = false; 101 public static boolean BOOL_FALSE_2 = false; 102 103 public static final byte BYTE_MIN_1 = Byte.MIN_VALUE; 104 public static byte BYTE_MIN_2 = Byte.MIN_VALUE; 105 public static final byte BYTE_MAX_1 = Byte.MAX_VALUE; 106 public static byte BYTE_MAX_2 = Byte.MAX_VALUE; 107 108 public static final short SHORT_MIN_1 = Short.MIN_VALUE; 109 public static short SHORT_MIN_2 = Short.MIN_VALUE; 110 public static final short SHORT_MAX_1 = Short.MAX_VALUE; 111 public static short SHORT_MAX_2 = Short.MAX_VALUE; 112 113 public static final char CHAR_MIN_1 = Character.MIN_VALUE; 114 public static char CHAR_MIN_2 = Character.MIN_VALUE; 115 public static final char CHAR_MAX_1 = Character.MAX_VALUE; 116 public static char CHAR_MAX_2 = Character.MAX_VALUE; 117 118 public static final int INT_MIN_1 = Integer.MIN_VALUE; 119 public static int INT_MIN_2 = Integer.MIN_VALUE; 120 public static final int INT_MAX_1 = Integer.MAX_VALUE; 121 public static int INT_MAX_2 = Integer.MAX_VALUE; 122 123 public static final float FLOAT_MIN_EXP_1 = Float.MIN_EXPONENT; 124 public static float FLOAT_MIN_EXP_2 = Float.MIN_EXPONENT; 125 public static final float FLOAT_MIN_NORM_1 = Float.MIN_NORMAL; 126 public static float FLOAT_MIN_NORM_2 = Float.MIN_NORMAL; 127 public static final float FLOAT_MIN_1 = Float.MIN_VALUE; 128 public static float FLOAT_MIN_2 = Float.MIN_VALUE; 129 public static final float FLOAT_MAX_1 = Float.MAX_VALUE; 130 public static float FLOAT_MAX_2 = Float.MAX_VALUE; 131 132 public static final long LONG_MIN_1 = Long.MIN_VALUE; 133 public static long LONG_MIN_2 = Long.MIN_VALUE; 134 public static final long LONG_MAX_1 = Long.MAX_VALUE; 135 public static long LONG_MAX_2 = Long.MAX_VALUE; 136 137 public static final double DOUBLE_MIN_EXP_1 = Double.MIN_EXPONENT; 138 public static double DOUBLE_MIN_EXP_2 = Double.MIN_EXPONENT; 139 public static final double DOUBLE_MIN_NORM_1 = Double.MIN_NORMAL; 140 public static double DOUBLE_MIN_NORM_2 = Double.MIN_NORMAL; 141 public static final double DOUBLE_MIN_1 = Double.MIN_VALUE; 142 public static double DOUBLE_MIN_2 = Double.MIN_VALUE; 143 public static final double DOUBLE_MAX_1 = Double.MAX_VALUE; 144 public static double DOUBLE_MAX_2 = Double.MAX_VALUE; 145 146 public static void main(String[] args) throws Exception { 147 test("foofalse", "foo" + BOOL_FALSE_1); 148 test("foofalse", "foo" + BOOL_FALSE_2); 149 test("footrue", "foo" + BOOL_TRUE_1); 150 test("footrue", "foo" + BOOL_TRUE_2); 151 152 test("foo127", "foo" + BYTE_MAX_1); 153 test("foo127", "foo" + BYTE_MAX_2); 154 test("foo-128", "foo" + BYTE_MIN_1); 155 test("foo-128", "foo" + BYTE_MIN_2); 156 157 test("foo32767", "foo" + SHORT_MAX_1); 158 test("foo32767", "foo" + SHORT_MAX_2); 159 test("foo-32768", "foo" + SHORT_MIN_1); 160 test("foo-32768", "foo" + SHORT_MIN_2); 161 162 test("foo\u0000", "foo" + CHAR_MIN_1); 163 test("foo\u0000", "foo" + CHAR_MIN_2); 164 test("foo\uFFFF", "foo" + CHAR_MAX_1); 165 test("foo\uFFFF", "foo" + CHAR_MAX_2); 166 167 test("foo2147483647", "foo" + INT_MAX_1); 168 test("foo2147483647", "foo" + INT_MAX_2); 169 test("foo-2147483648", "foo" + INT_MIN_1); 170 test("foo-2147483648", "foo" + INT_MIN_2); 171 172 test("foo1.1754944E-38", "foo" + FLOAT_MIN_NORM_1); 173 test("foo1.1754944E-38", "foo" + FLOAT_MIN_NORM_2 ); 174 test("foo-126.0", "foo" + FLOAT_MIN_EXP_1); 175 test("foo-126.0", "foo" + FLOAT_MIN_EXP_2); 176 test("foo1.4E-45", "foo" + FLOAT_MIN_1); 177 test("foo1.4E-45", "foo" + FLOAT_MIN_2); 178 test("foo3.4028235E38", "foo" + FLOAT_MAX_1); 179 test("foo3.4028235E38", "foo" + FLOAT_MAX_2); 180 181 test("foo-9223372036854775808", "foo" + LONG_MIN_1); 182 test("foo-9223372036854775808", "foo" + LONG_MIN_2); 183 test("foo9223372036854775807", "foo" + LONG_MAX_1); 184 test("foo9223372036854775807", "foo" + LONG_MAX_2); 185 186 test("foo2.2250738585072014E-308", "foo" + DOUBLE_MIN_NORM_1); 187 test("foo2.2250738585072014E-308", "foo" + DOUBLE_MIN_NORM_2); 188 test("foo-1022.0", "foo" + DOUBLE_MIN_EXP_1); 189 test("foo-1022.0", "foo" + DOUBLE_MIN_EXP_2); 190 test("foo4.9E-324", "foo" + DOUBLE_MIN_1); 191 test("foo4.9E-324", "foo" + DOUBLE_MIN_2); 192 test("foo1.7976931348623157E308", "foo" + DOUBLE_MAX_1); 193 test("foo1.7976931348623157E308", "foo" + DOUBLE_MAX_2); 194 } 195 196 public static void test(String expected, String actual) { 197 if (!expected.equals(actual)) { 198 StringBuilder sb = new StringBuilder(); 199 sb.append("Expected = "); 200 sb.append(expected); 201 sb.append(", actual = "); 202 sb.append(actual); 203 throw new IllegalStateException(sb.toString()); 204 } 205 } 206 }