< prev index next >

test/jdk/java/lang/String/concat/StringConcatFactoryRepeatedConstants.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2016, 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. --- 1,7 ---- /* ! * Copyright (c) 2019, 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.
*** 19,55 **** * 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. */ ! import java.io.Serializable; ! import java.lang.invoke.*; ! import java.util.concurrent.Callable; /** * @test ! * @summary StringConcatFactory exactness check produces bad bytecode when a non-arg concat is requested ! * @bug 8148787 ! * ! * @compile StringConcatFactoryEmptyMethods.java ! * ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT -Djava.lang.invoke.stringConcat.debug=true StringConcatFactoryEmptyMethods * */ ! public class StringConcatFactoryEmptyMethods { public static void main(String[] args) throws Throwable { ! StringConcatFactory.makeConcat( MethodHandles.lookup(), "foo", ! MethodType.methodType(String.class) ); ! StringConcatFactory.makeConcatWithConstants( MethodHandles.lookup(), "foo", MethodType.methodType(String.class), ! "" ); } } --- 19,76 ---- * 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. */ ! import java.lang.invoke.CallSite; ! import java.lang.invoke.MethodHandles; ! import java.lang.invoke.MethodType; ! import java.lang.invoke.StringConcatFactory; /** * @test ! * @summary StringConcatFactory allow recipes with repeated constants, but this ! * is not expressible with java code and needs an explicit sanity test ! * @bug 8222852 ! * ! * @compile StringConcatFactoryRepeatedConstants.java ! * ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB StringConcatFactoryRepeatedConstants ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED StringConcatFactoryRepeatedConstants ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED StringConcatFactoryRepeatedConstants ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=BC_SB_SIZED_EXACT StringConcatFactoryRepeatedConstants ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_SB_SIZED_EXACT StringConcatFactoryRepeatedConstants ! * @run main/othervm -Xverify:all -Djava.lang.invoke.stringConcat=MH_INLINE_SIZED_EXACT StringConcatFactoryRepeatedConstants * */ ! public class StringConcatFactoryRepeatedConstants { public static void main(String[] args) throws Throwable { ! ! CallSite site = StringConcatFactory.makeConcatWithConstants( MethodHandles.lookup(), "foo", ! MethodType.methodType(String.class), ! "\u0002\u0002", ! "foo", "bar" ); + String string = (String)site.dynamicInvoker().invoke(); + if (!"foobar".equals(string)) { + throw new IllegalStateException("Expected: foobar, got: " + string); + } ! site = StringConcatFactory.makeConcatWithConstants( MethodHandles.lookup(), "foo", MethodType.methodType(String.class), ! "\u0002\u0002\u0002\u0002", ! "foo", 17.0f, 4711L, "bar" ); + string = (String)site.dynamicInvoker().invoke(); + StringBuilder sb = new StringBuilder(); + sb.append("foo").append(17.0f).append(4711L).append("bar"); + if (!sb.toString().equals(string)) { + throw new IllegalStateException("Expected: " + sb.toString() + ", got: " + string); + } } }
< prev index next >