< prev index next >

test/valhalla/mvt/ConstructorTest.java

Print this page
rev 17247 : [mq]: find-constructor

@@ -19,111 +19,52 @@
  * 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 jdk.experimental.value.MethodHandleBuilder;
 import jdk.experimental.value.ValueType;
 import org.testng.annotations.Test;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+import static org.testng.AssertJUnit.assertTrue;
 
 /*
  * @test
- * @run testng/othervm -Xverify:none -XX:+EnableMVT -Dvalhalla.enablePoolPatches=true WithFieldTest
+ * @run testng/othervm -Xverify:none -XX:+EnableMVT -Dvalhalla.enablePoolPatches=true ConstructorTest
  */
 
 @Test
-public class WithFieldTest {
+public class ConstructorTest {
 
-    static final ValueType<?> VT_Point = ValueType.forClass(Point.class);
-
-    static final ValueType<?> VT_PrivatePoint = ValueType.forClass(PrivatePoint.class);
-
-    static final MethodHandle MH_Point_get_x;
-
-    static final MethodHandle MH_PrivatePoint_get_x;
+    static final ValueType<?> VT_Interval = ValueType.forClass(Interval.class);
 
+    static final MethodHandle VT_constructor;
     static {
         try {
-            MH_Point_get_x = MethodHandles.lookup().findGetter(
-                    Point.class, "x", int.class);
-            MH_PrivatePoint_get_x = MethodHandles.lookup().findVirtual(
-                    PrivatePoint.class, "getX", MethodType.methodType(int.class));
+            MethodHandle mh = VT_Interval.findConstructor(MethodHandles.lookup(),
+                                                          MethodType.methodType(void.class, int.class, int.class));
+            VT_constructor = MethodHandles.filterReturnValue(mh, VT_Interval.box());
         } catch (Exception e) {
             throw new InternalError(e);
         }
     }
 
-
-    public void testPrivateLookupPrivateFieldUsingVCC() throws Throwable {
-        testPrivateAccess(VT_PrivatePoint, VT_PrivatePoint.boxClass(), MethodHandles.lookup(), MH_PrivatePoint_get_x);
-    }
-
-    public void testPrivateLookupPublicFieldUsingVCC() throws Throwable {
-        testPrivateAccess(VT_Point, VT_Point.boxClass(), MethodHandles.lookup(), MH_Point_get_x);
-    }
-
-    public void testPrivateLookupPrivateFieldUsingDVT() throws Throwable {
-        testPrivateAccess(VT_PrivatePoint, VT_PrivatePoint.valueClass(), MethodHandles.lookup(), MH_PrivatePoint_get_x);
-    }
-
-    public void testPrivateLookupPublicFieldUsingDVT() throws Throwable {
-        testPrivateAccess(VT_Point, VT_Point.valueClass(), MethodHandles.lookup(), MH_Point_get_x);
-    }
-
-
-    @Test(expectedExceptions = IllegalAccessError.class)
-    public void testLookupPrivateFieldUsingVCC() throws Throwable {
-        testAccess(VT_PrivatePoint, MethodHandles.lookup(), MH_PrivatePoint_get_x);
-    }
-
-    @Test(expectedExceptions = IllegalAccessError.class)
-    public void testLookupPublicFieldUsingVCC() throws Throwable {
-        testAccess(VT_Point, MethodHandles.lookup(), MH_Point_get_x);
-    }
-
-    @Test(expectedExceptions = IllegalAccessError.class)
-    public void testLookupPrivateFieldUsingDVT() throws Throwable {
-        testAccess(VT_PrivatePoint, MethodHandles.lookup(), MH_PrivatePoint_get_x);
-    }
-
-    @Test(expectedExceptions = IllegalAccessError.class)
-    public void testLookupPublicFieldUsingDVT() throws Throwable {
-        testAccess(VT_Point, MethodHandles.lookup(), MH_Point_get_x);
-    }
-
-
-    static void testPrivateAccess(ValueType<?> vt, Class<?> lc, MethodHandles.Lookup l, MethodHandle getter) throws Throwable {
-        testAccess(vt, MethodHandles.privateLookupIn(lc, l), getter);
+    public void testConstructorWithValidArguments() throws Throwable {
+        Interval i = (Interval) VT_constructor.invoke(1, 2);
+        assertEquals(i.l, 1);
+        assertEquals(i.u, 2);
     }
 
-    static void testAccess(ValueType<?> vt, MethodHandles.Lookup l, MethodHandle getter) throws Throwable {
-        MethodHandle mh = MethodHandles.collectArguments(vwithfield(l, vt, "x", int.class), 0, vt.defaultValueConstant());
-
-        mh = MethodHandles.filterReturnValue(mh, vt.box());
-
-        mh = MethodHandles.filterReturnValue(mh, getter);
-
-        int actual = (int) mh.invoke(42);
-        assertEquals(actual, 42);
-    }
-
-    static MethodHandle vwithfield(MethodHandles.Lookup lookup, ValueType<?> vt, String name, Class<?> type) {
-        Class<?> dvt = vt.valueClass();
-        return MethodHandleBuilder.loadCode(
-                lookup,
-                lookup.lookupClass().toString() + "_wither$" + name,
-                MethodType.methodType(dvt, dvt, type),
-                C -> C.vload(0).load(1).vwithfield(dvt, name, fieldDescriptor(type)).vreturn());
+    public void testConstructorWithIllegalArguments() throws Throwable {
+        try {
+            Interval i = (Interval) VT_constructor.invoke(3, 1);
+            fail();
+        } catch (Throwable t) {
+            assertTrue(IllegalArgumentException.class.isInstance(t));
     }
-
-    static String fieldDescriptor(Class<?> type) {
-        String s = MethodType.methodType(type).toMethodDescriptorString();
-        return s.substring(2);
     }
-
 }
< prev index next >