< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/factories/TernaryOperatorFactory.java
Print this page
*** 21,62 ****
* questions.
*/
package jdk.test.lib.jittester.factories;
- import jdk.test.lib.Pair;
import jdk.test.lib.jittester.IRNode;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.TernaryOperator;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.TypeList;
- import jdk.test.lib.jittester.utils.TypeUtil;
import jdk.test.lib.jittester.types.TypeKlass;
- import jdk.test.lib.jittester.types.TypeBoolean;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class TernaryOperatorFactory extends OperatorFactory {
! protected final Type resultType;
! protected final TypeKlass ownerClass;
TernaryOperatorFactory(long complexityLimit, int operatorLimit, TypeKlass ownerClass,
Type resultType, boolean exceptionSafe, boolean noconsts) {
super(2, complexityLimit, operatorLimit, exceptionSafe, noconsts);
this.resultType = resultType;
this.ownerClass = ownerClass;
}
! private Pair<Type, Type> generateTypes() {
! Pair<Type, Type> types = new Pair<>(resultType, PseudoRandom.randomElement(
! TypeUtil.getImplicitlyCastable(TypeList.getAll(), resultType)));
! if (PseudoRandom.randomBoolean())
! types = new Pair<>(types.second, types.first);
! return types;
! }
!
! private IRNode generateProduction(Type conditionType, Type leftType, Type rightType) throws ProductionFailedException {
int leftOpLimit = (int) (PseudoRandom.random() * 0.3 * (operatorLimit - 1));
int rightOpLimit = (int) (PseudoRandom.random() * 0.3 * (operatorLimit - 1));
int condOpLimit = operatorLimit - 1 - leftOpLimit - rightOpLimit;
long leftComplLimit = (long) (PseudoRandom.random() * 0.3 * (complexityLimit - 1));
long rightComplLimit = (long) (PseudoRandom.random() * 0.3 * (complexityLimit - 1));
--- 21,51 ----
* questions.
*/
package jdk.test.lib.jittester.factories;
import jdk.test.lib.jittester.IRNode;
import jdk.test.lib.jittester.ProductionFailedException;
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.TernaryOperator;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.TypeList;
import jdk.test.lib.jittester.types.TypeKlass;
import jdk.test.lib.jittester.utils.PseudoRandom;
! class TernaryOperatorFactory extends OperatorFactory<TernaryOperator> {
! private final Type resultType;
! private final TypeKlass ownerClass;
TernaryOperatorFactory(long complexityLimit, int operatorLimit, TypeKlass ownerClass,
Type resultType, boolean exceptionSafe, boolean noconsts) {
super(2, complexityLimit, operatorLimit, exceptionSafe, noconsts);
this.resultType = resultType;
this.ownerClass = ownerClass;
}
! private TernaryOperator generateProduction() throws ProductionFailedException {
int leftOpLimit = (int) (PseudoRandom.random() * 0.3 * (operatorLimit - 1));
int rightOpLimit = (int) (PseudoRandom.random() * 0.3 * (operatorLimit - 1));
int condOpLimit = operatorLimit - 1 - leftOpLimit - rightOpLimit;
long leftComplLimit = (long) (PseudoRandom.random() * 0.3 * (complexityLimit - 1));
long rightComplLimit = (long) (PseudoRandom.random() * 0.3 * (complexityLimit - 1));
*** 67,87 ****
}
IRNodeBuilder builder = new IRNodeBuilder().setOwnerKlass(ownerClass)
.setExceptionSafe(exceptionSafe);
IRNode conditionalExp = builder.setComplexityLimit(condComplLimit)
.setOperatorLimit(condOpLimit)
! .setResultType(conditionType)
.setNoConsts(noconsts)
.getExpressionFactory()
.produce();
// Ignore initializations performed in left and right branches:
IRNode leftExp;
SymbolTable.push();
try {
leftExp = builder.setComplexityLimit(leftComplLimit)
.setOperatorLimit(leftOpLimit)
! .setResultType(leftType)
.setNoConsts(false)
.getExpressionFactory()
.produce();
} finally {
SymbolTable.pop();
--- 56,76 ----
}
IRNodeBuilder builder = new IRNodeBuilder().setOwnerKlass(ownerClass)
.setExceptionSafe(exceptionSafe);
IRNode conditionalExp = builder.setComplexityLimit(condComplLimit)
.setOperatorLimit(condOpLimit)
! .setResultType(TypeList.BOOLEAN)
.setNoConsts(noconsts)
.getExpressionFactory()
.produce();
// Ignore initializations performed in left and right branches:
IRNode leftExp;
SymbolTable.push();
try {
leftExp = builder.setComplexityLimit(leftComplLimit)
.setOperatorLimit(leftOpLimit)
! .setResultType(resultType)
.setNoConsts(false)
.getExpressionFactory()
.produce();
} finally {
SymbolTable.pop();
*** 89,119 ****
IRNode rightExp;
SymbolTable.push();
try {
rightExp = builder.setComplexityLimit(rightComplLimit)
.setOperatorLimit(rightOpLimit)
! .setResultType(rightType)
.setNoConsts(false)
.getExpressionFactory()
.produce();
} finally {
SymbolTable.pop();
}
return new TernaryOperator(conditionalExp, leftExp, rightExp);
}
@Override
! public IRNode produce() throws ProductionFailedException {
! Pair<Type, Type> types;
! try {
! types = generateTypes();
! } catch (RuntimeException ex) {
! throw new ProductionFailedException(ex.getMessage());
! }
try {
SymbolTable.push();
! IRNode result = generateProduction(new TypeBoolean(), types.first, types.second);
SymbolTable.merge();
return result;
} catch (ProductionFailedException e) {
SymbolTable.pop();
throw e;
--- 78,102 ----
IRNode rightExp;
SymbolTable.push();
try {
rightExp = builder.setComplexityLimit(rightComplLimit)
.setOperatorLimit(rightOpLimit)
! .setResultType(resultType)
.setNoConsts(false)
.getExpressionFactory()
.produce();
} finally {
SymbolTable.pop();
}
return new TernaryOperator(conditionalExp, leftExp, rightExp);
}
@Override
! public TernaryOperator produce() throws ProductionFailedException {
try {
SymbolTable.push();
! TernaryOperator result = generateProduction();
SymbolTable.merge();
return result;
} catch (ProductionFailedException e) {
SymbolTable.pop();
throw e;
< prev index next >