test/java/lang/invoke/LFCaching/TestMethods.java

Print this page

        

*** 42,52 **** FOLD_ARGUMENTS("foldArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); --- 42,52 ---- FOLD_ARGUMENTS("foldArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
*** 81,99 **** }, DROP_ARGUMENTS("dropArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int dropArgsPos = Helper.RNG.nextInt(realArity + 1); data.put("dropArgsPos", dropArgsPos); MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator( ! Helper.RNG.nextInt(Helper.MAX_ARITY - realArity)); data.put("mtDropArgs", mtDropArgs); return data; } @Override --- 81,99 ---- }, DROP_ARGUMENTS("dropArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int dropArgsPos = Helper.RNG.nextInt(realArity + 1); data.put("dropArgsPos", dropArgsPos); MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator( ! Helper.RNG.nextInt(super.maxArity - realArity)); data.put("mtDropArgs", mtDropArgs); return data; } @Override
*** 104,127 **** MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(), mtTarget.parameterList(), kind); int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget); int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs); List<Class<?>> fakeParList; ! if (mtTgtSlotsCount + mtDASlotsCount > Helper.MAX_ARITY - 1) { fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(), ! Helper.MAX_ARITY - mtTgtSlotsCount - 1); } else { fakeParList = mtDropArgs.parameterList(); } return MethodHandles.dropArguments(target, dropArgsPos, fakeParList); } }, ! EXPLICIT_CAST_ARGUMENTS("explicitCastArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity); --- 104,127 ---- MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(), mtTarget.parameterList(), kind); int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget); int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs); List<Class<?>> fakeParList; ! if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) { fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(), ! super.maxArity - mtTgtSlotsCount - 1); } else { fakeParList = mtDropArgs.parameterList(); } return MethodHandles.dropArguments(target, dropArgsPos, fakeParList); } }, ! EXPLICIT_CAST_ARGUMENTS("explicitCastArguments", Helper.MAX_ARITY / 2) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); MethodType mtExcplCastArgs = TestMethods.randomMethodTypeGenerator(realArity);
*** 144,158 **** MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(), mtTarget.parameterList(), kind); return MethodHandles.explicitCastArguments(target, mtExcplCastArgs); } }, ! FILTER_ARGUMENTS("filterArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int filterArgsPos = Helper.RNG.nextInt(realArity + 1); --- 144,158 ---- MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(), mtTarget.parameterList(), kind); return MethodHandles.explicitCastArguments(target, mtExcplCastArgs); } }, ! FILTER_ARGUMENTS("filterArguments", Helper.MAX_ARITY / 2) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
*** 182,192 **** }, FILTER_RETURN_VALUE("filterReturnValue") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int filterArgsPos = Helper.RNG.nextInt(realArity + 1); --- 182,192 ---- }, FILTER_RETURN_VALUE("filterReturnValue") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
*** 209,219 **** }, INSERT_ARGUMENTS("insertArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int insertArgsPos = Helper.RNG.nextInt(realArity + 1); --- 209,219 ---- }, INSERT_ARGUMENTS("insertArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
*** 234,255 **** mtTarget.parameterList(), kind); Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList()); return MethodHandles.insertArguments(target, insertArgsPos, insertList); } }, ! PERMUTE_ARGUMENTS("permuteArguments") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int[] permuteArgsReorderArray = new int[realArity]; ! int mtParmuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY); ! mtParmuteArgsNum = mtParmuteArgsNum == 0 ? 1 : mtParmuteArgsNum; ! MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtParmuteArgsNum); mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType()); for (int i = 0; i < realArity; i++) { int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount()); permuteArgsReorderArray[i] = mtPermuteArgsParNum; mtTarget = mtTarget.changeParameterType( --- 234,255 ---- mtTarget.parameterList(), kind); Object[] insertList = Helper.randomArgs(mtInsertArgs.parameterList()); return MethodHandles.insertArguments(target, insertArgsPos, insertList); } }, ! PERMUTE_ARGUMENTS("permuteArguments", Helper.MAX_ARITY / 2) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int[] permuteArgsReorderArray = new int[realArity]; ! int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY); ! mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum; ! MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum); mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType()); for (int i = 0; i < realArity; i++) { int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount()); permuteArgsReorderArray[i] = mtPermuteArgsParNum; mtTarget = mtTarget.changeParameterType(
*** 273,283 **** }, THROW_EXCEPTION("throwException") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 273,283 ---- }, THROW_EXCEPTION("throwException") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 291,301 **** }, GUARD_WITH_TEST("guardWithTest") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); --- 291,301 ---- }, GUARD_WITH_TEST("guardWithTest") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
*** 327,337 **** }, CATCH_EXCEPTION("catchException") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); --- 327,337 ---- }, CATCH_EXCEPTION("catchException") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
*** 357,371 **** MethodHandle handler = TestMethods.methodHandleGenerator( mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO); return MethodHandles.catchException(target, Exception.class, handler); } }, ! INVOKER("invoker") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 357,371 ---- MethodHandle handler = TestMethods.methodHandleGenerator( mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO); return MethodHandles.catchException(target, Exception.class, handler); } }, ! INVOKER("invoker", Helper.MAX_ARITY - 1) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 373,387 **** protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { MethodType mtTarget = (MethodType) data.get("mtTarget"); return MethodHandles.invoker(mtTarget); } }, ! EXACT_INVOKER("exactInvoker") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 373,387 ---- protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { MethodType mtTarget = (MethodType) data.get("mtTarget"); return MethodHandles.invoker(mtTarget); } }, ! EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 389,403 **** protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { MethodType mtTarget = (MethodType) data.get("mtTarget"); return MethodHandles.exactInvoker(mtTarget); } }, ! SPREAD_INVOKER("spreadInvoker") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); --- 389,403 ---- protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { MethodType mtTarget = (MethodType) data.get("mtTarget"); return MethodHandles.exactInvoker(mtTarget); } }, ! SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); // Arity after reducing because of long and double take 2 slots. int realArity = mtTarget.parameterCount(); int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1);
*** 414,424 **** }, ARRAY_ELEMENT_GETTER("arrayElementGetter") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 414,424 ---- }, ARRAY_ELEMENT_GETTER("arrayElementGetter") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 434,444 **** }, ARRAY_ELEMENT_SETTER("arrayElementSetter") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 434,444 ---- }, ARRAY_ELEMENT_SETTER("arrayElementSetter") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 454,464 **** }, CONSTANT("constant") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 454,464 ---- }, CONSTANT("constant") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 479,489 **** }, IDENTITY("identity") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; } --- 479,489 ---- }, IDENTITY("identity") { @Override public Map<String, Object> getTestCaseData() { Map<String, Object> data = new HashMap<>(); ! int desiredArity = Helper.RNG.nextInt(super.maxArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); data.put("mtTarget", mtTarget); return data; }
*** 501,512 **** /** * Test method's name. */ public final String name; ! private TestMethods(String name) { this.name = name; } protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException { throw new UnsupportedOperationException("TESTBUG: getMH method is not implemented for test method " + this); } --- 501,519 ---- /** * Test method's name. */ public final String name; ! private final int maxArity; ! ! private TestMethods(String name, int maxArity) { this.name = name; + this.maxArity = maxArity; + } + + private TestMethods(String name) { + this(name, Helper.MAX_ARITY); } protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException { throw new UnsupportedOperationException("TESTBUG: getMH method is not implemented for test method " + this); }