jdk/test/java/lang/invoke/6998541/Test6998541.java
changeset 27785 29d4cb4a8f5e
parent 9752 88ab34b6da6d
child 32649 2ee9017c7597
equal deleted inserted replaced
27784:a51d6d4e0528 27785:29d4cb4a8f5e
   212         assertEquals((float)   i, (float)   mh_fz.invokeExact(x));  // boolean -> float
   212         assertEquals((float)   i, (float)   mh_fz.invokeExact(x));  // boolean -> float
   213         assertEquals((double)  i, (double)  mh_dz.invokeExact(x));  // boolean -> double
   213         assertEquals((double)  i, (double)  mh_dz.invokeExact(x));  // boolean -> double
   214     }
   214     }
   215     private static void boolean2prim_invalid(boolean x) throws Throwable {
   215     private static void boolean2prim_invalid(boolean x) throws Throwable {
   216         if (DO_CASTS)  return;
   216         if (DO_CASTS)  return;
   217         try { byte    y = (byte)    mh_bz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> byte
   217         try { byte    y = (byte)    mh_bz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> byte
   218         try { char    y = (char)    mh_cz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> char
   218         try { char    y = (char)    mh_cz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> char
   219         try { short   y = (short)   mh_sz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> short
   219         try { short   y = (short)   mh_sz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> short
   220         try { int     y = (int)     mh_iz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> int
   220         try { int     y = (int)     mh_iz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> int
   221         try { long    y = (long)    mh_jz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> long
   221         try { long    y = (long)    mh_jz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> long
   222         try { float   y = (float)   mh_fz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> float
   222         try { float   y = (float)   mh_fz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> float
   223         try { double  y = (double)  mh_dz.invokeExact(x); fail(); } catch (ClassCastException _) {}  // boolean -> double
   223         try { double  y = (double)  mh_dz.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // boolean -> double
   224     }
   224     }
   225 
   225 
   226     private static MethodHandle mh_b(Class ret) { return mh(ret, byte.class); }
   226     private static MethodHandle mh_b(Class ret) { return mh(ret, byte.class); }
   227 
   227 
   228     private final static MethodHandle mh_zb = mh_b(boolean.class);
   228     private final static MethodHandle mh_zb = mh_b(boolean.class);
   246         assertEquals((char)    x, (char)    mh_cb.invokeExact(x));  // byte -> char
   246         assertEquals((char)    x, (char)    mh_cb.invokeExact(x));  // byte -> char
   247         assertEquals((boolean) z, (boolean) mh_zb.invokeExact(x));  // byte -> boolean
   247         assertEquals((boolean) z, (boolean) mh_zb.invokeExact(x));  // byte -> boolean
   248     }
   248     }
   249     private static void byte2prim_invalid(byte x) throws Throwable {
   249     private static void byte2prim_invalid(byte x) throws Throwable {
   250         if (DO_CASTS)  return;
   250         if (DO_CASTS)  return;
   251         try { char    y = (char)    mh_cb.invokeExact(x); fail(); } catch (ClassCastException _) {}  // byte -> char
   251         try { char    y = (char)    mh_cb.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // byte -> char
   252         try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException _) {}  // byte -> boolean
   252         try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // byte -> boolean
   253     }
   253     }
   254 
   254 
   255     private static MethodHandle mh_c(Class ret) { return mh(ret, char.class); }
   255     private static MethodHandle mh_c(Class ret) { return mh(ret, char.class); }
   256 
   256 
   257     private final static MethodHandle mh_zc = mh_c(boolean.class);
   257     private final static MethodHandle mh_zc = mh_c(boolean.class);
   275         assertEquals((byte)    x, (byte)    mh_bc.invokeExact(x));  // char -> byte
   275         assertEquals((byte)    x, (byte)    mh_bc.invokeExact(x));  // char -> byte
   276         assertEquals((short)   x, (short)   mh_sc.invokeExact(x));  // char -> short
   276         assertEquals((short)   x, (short)   mh_sc.invokeExact(x));  // char -> short
   277     }
   277     }
   278     private static void char2prim_invalid(char x) throws Throwable {
   278     private static void char2prim_invalid(char x) throws Throwable {
   279         if (DO_CASTS)  return;
   279         if (DO_CASTS)  return;
   280         try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException _) {}  // char -> boolean
   280         try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // char -> boolean
   281         try { byte    y = (byte)    mh_bc.invokeExact(x); fail(); } catch (ClassCastException _) {}  // char -> byte
   281         try { byte    y = (byte)    mh_bc.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // char -> byte
   282         try { short   y = (short)   mh_sc.invokeExact(x); fail(); } catch (ClassCastException _) {}  // char -> short
   282         try { short   y = (short)   mh_sc.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // char -> short
   283     }
   283     }
   284 
   284 
   285     private static MethodHandle mh_s(Class ret) { return mh(ret, short.class); }
   285     private static MethodHandle mh_s(Class ret) { return mh(ret, short.class); }
   286 
   286 
   287     private final static MethodHandle mh_zs = mh_s(boolean.class);
   287     private final static MethodHandle mh_zs = mh_s(boolean.class);
   305         assertEquals((byte)    x, (byte)    mh_bs.invokeExact(x));  // short -> byte
   305         assertEquals((byte)    x, (byte)    mh_bs.invokeExact(x));  // short -> byte
   306         assertEquals((char)    x, (char)    mh_cs.invokeExact(x));  // short -> char
   306         assertEquals((char)    x, (char)    mh_cs.invokeExact(x));  // short -> char
   307     }
   307     }
   308     private static void short2prim_invalid(short x) throws Throwable {
   308     private static void short2prim_invalid(short x) throws Throwable {
   309         if (DO_CASTS)  return;
   309         if (DO_CASTS)  return;
   310         try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException _) {}  // short -> boolean
   310         try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // short -> boolean
   311         try { byte    y = (byte)    mh_bs.invokeExact(x); fail(); } catch (ClassCastException _) {}  // short -> byte
   311         try { byte    y = (byte)    mh_bs.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // short -> byte
   312         try { char    y = (char)    mh_cs.invokeExact(x); fail(); } catch (ClassCastException _) {}  // short -> char
   312         try { char    y = (char)    mh_cs.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // short -> char
   313     }
   313     }
   314 
   314 
   315     private static MethodHandle mh_i(Class ret) { return mh(ret, int.class); }
   315     private static MethodHandle mh_i(Class ret) { return mh(ret, int.class); }
   316 
   316 
   317     private final static MethodHandle mh_zi = mh_i(boolean.class);
   317     private final static MethodHandle mh_zi = mh_i(boolean.class);
   335         assertEquals((char)    x, (char)    mh_ci.invokeExact(x));  // int -> char
   335         assertEquals((char)    x, (char)    mh_ci.invokeExact(x));  // int -> char
   336         assertEquals((short)   x, (short)   mh_si.invokeExact(x));  // int -> short
   336         assertEquals((short)   x, (short)   mh_si.invokeExact(x));  // int -> short
   337     }
   337     }
   338     private static void int2prim_invalid(int x) throws Throwable {
   338     private static void int2prim_invalid(int x) throws Throwable {
   339         if (DO_CASTS)  return;
   339         if (DO_CASTS)  return;
   340         try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException _) {}  // int -> boolean
   340         try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // int -> boolean
   341         try { byte    y = (byte)    mh_bi.invokeExact(x); fail(); } catch (ClassCastException _) {}  // int -> byte
   341         try { byte    y = (byte)    mh_bi.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // int -> byte
   342         try { char    y = (char)    mh_ci.invokeExact(x); fail(); } catch (ClassCastException _) {}  // int -> char
   342         try { char    y = (char)    mh_ci.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // int -> char
   343         try { short   y = (short)   mh_si.invokeExact(x); fail(); } catch (ClassCastException _) {}  // int -> short
   343         try { short   y = (short)   mh_si.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // int -> short
   344     }
   344     }
   345 
   345 
   346     private static MethodHandle mh_j(Class ret) { return mh(ret, long.class); }
   346     private static MethodHandle mh_j(Class ret) { return mh(ret, long.class); }
   347 
   347 
   348     private final static MethodHandle mh_zj = mh_j(boolean.class);
   348     private final static MethodHandle mh_zj = mh_j(boolean.class);
   366         assertEquals((short)  x, (short)   mh_sj.invokeExact(x));  // long -> short
   366         assertEquals((short)  x, (short)   mh_sj.invokeExact(x));  // long -> short
   367         assertEquals((int)    x, (int)     mh_ij.invokeExact(x));  // long -> int
   367         assertEquals((int)    x, (int)     mh_ij.invokeExact(x));  // long -> int
   368     }
   368     }
   369     private static void long2prim_invalid(long x) throws Throwable {
   369     private static void long2prim_invalid(long x) throws Throwable {
   370         if (DO_CASTS)  return;
   370         if (DO_CASTS)  return;
   371         try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException _) {}  // long -> boolean
   371         try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // long -> boolean
   372         try { byte    y = (byte)    mh_bj.invokeExact(x); fail(); } catch (ClassCastException _) {}  // long -> byte
   372         try { byte    y = (byte)    mh_bj.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // long -> byte
   373         try { char    y = (char)    mh_cj.invokeExact(x); fail(); } catch (ClassCastException _) {}  // long -> char
   373         try { char    y = (char)    mh_cj.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // long -> char
   374         try { short   y = (short)   mh_sj.invokeExact(x); fail(); } catch (ClassCastException _) {}  // long -> short
   374         try { short   y = (short)   mh_sj.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // long -> short
   375         try { int     y = (int)     mh_ij.invokeExact(x); fail(); } catch (ClassCastException _) {}  // long -> int
   375         try { int     y = (int)     mh_ij.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // long -> int
   376     }
   376     }
   377 
   377 
   378     private static MethodHandle mh_f(Class ret) { return mh(ret, float.class); }
   378     private static MethodHandle mh_f(Class ret) { return mh(ret, float.class); }
   379 
   379 
   380     private final static MethodHandle mh_zf = mh_f(boolean.class);
   380     private final static MethodHandle mh_zf = mh_f(boolean.class);
   398         assertEquals((int)     x, (int)     mh_if.invokeExact(x));  // float -> int
   398         assertEquals((int)     x, (int)     mh_if.invokeExact(x));  // float -> int
   399         assertEquals((long)    x, (long)    mh_jf.invokeExact(x));  // float -> long
   399         assertEquals((long)    x, (long)    mh_jf.invokeExact(x));  // float -> long
   400     }
   400     }
   401     private static void float2prim_invalid(float x) throws Throwable {
   401     private static void float2prim_invalid(float x) throws Throwable {
   402         if (DO_CASTS)  return;
   402         if (DO_CASTS)  return;
   403         try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> boolean
   403         try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> boolean
   404         try { byte    y = (byte)    mh_bf.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> byte
   404         try { byte    y = (byte)    mh_bf.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> byte
   405         try { char    y = (char)    mh_cf.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> char
   405         try { char    y = (char)    mh_cf.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> char
   406         try { short   y = (short)   mh_sf.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> short
   406         try { short   y = (short)   mh_sf.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> short
   407         try { int     y = (int)     mh_if.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> int
   407         try { int     y = (int)     mh_if.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> int
   408         try { long    y = (long)    mh_jf.invokeExact(x); fail(); } catch (ClassCastException _) {}  // float -> long
   408         try { long    y = (long)    mh_jf.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // float -> long
   409     }
   409     }
   410 
   410 
   411     private static MethodHandle mh_d(Class ret) { return mh(ret, double.class); }
   411     private static MethodHandle mh_d(Class ret) { return mh(ret, double.class); }
   412 
   412 
   413     private final static MethodHandle mh_zd = mh_d(boolean.class);
   413     private final static MethodHandle mh_zd = mh_d(boolean.class);
   431         assertEquals((long)    x, (long)    mh_jd.invokeExact(x));  // double -> long
   431         assertEquals((long)    x, (long)    mh_jd.invokeExact(x));  // double -> long
   432         assertEquals((float)   x, (float)   mh_fd.invokeExact(x));  // double -> float
   432         assertEquals((float)   x, (float)   mh_fd.invokeExact(x));  // double -> float
   433     }
   433     }
   434     private static void double2prim_invalid(double x) throws Throwable {
   434     private static void double2prim_invalid(double x) throws Throwable {
   435         if (DO_CASTS)  return;
   435         if (DO_CASTS)  return;
   436         try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> boolean
   436         try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> boolean
   437         try { byte    y = (byte)    mh_bd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> byte
   437         try { byte    y = (byte)    mh_bd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> byte
   438         try { char    y = (char)    mh_cd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> char
   438         try { char    y = (char)    mh_cd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> char
   439         try { short   y = (short)   mh_sd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> short
   439         try { short   y = (short)   mh_sd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> short
   440         try { int     y = (int)     mh_id.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> int
   440         try { int     y = (int)     mh_id.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> int
   441         try { long    y = (long)    mh_jd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> long
   441         try { long    y = (long)    mh_jd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> long
   442         try { float   y = (float)   mh_fd.invokeExact(x); fail(); } catch (ClassCastException _) {}  // double -> float
   442         try { float   y = (float)   mh_fd.invokeExact(x); fail(); } catch (ClassCastException expected) {}  // double -> float
   443     }
   443     }
   444 
   444 
   445     private final static MethodHandle mh_zv = mh(boolean.class);
   445     private final static MethodHandle mh_zv = mh(boolean.class);
   446     private final static MethodHandle mh_bv = mh(byte.class   );
   446     private final static MethodHandle mh_bv = mh(byte.class   );
   447     private final static MethodHandle mh_cv = mh(char.class   );
   447     private final static MethodHandle mh_cv = mh(char.class   );