Search in sources :

Example 21 with SmtExpr

use of org.evosuite.symbolic.solver.smt.SmtExpr in project evosuite by EvoSuite.

the class ExprToCVC4Visitor method visit.

@Override
public SmtExpr visit(StringBinaryExpression e, Void v) {
    SmtExpr left = e.getLeftOperand().accept(this, null);
    SmtExpr right = e.getRightOperand().accept(this, null);
    if (left == null || right == null) {
        return null;
    }
    if (!left.isSymbolic() && !right.isSymbolic()) {
        String stringValue = e.getConcreteValue();
        SmtExpr strConstant = SmtExprBuilder.mkStringConstant(stringValue);
        return strConstant;
    }
    Operator op = e.getOperator();
    switch(op) {
        case CONCAT:
            {
                SmtExpr concatExpr = SmtExprBuilder.mkStrConcat(left, right);
                return concatExpr;
            }
        case APPEND_STRING:
            {
                SmtExpr concatExpr = SmtExprBuilder.mkStrConcat(left, right);
                return concatExpr;
            }
        case APPEND_INTEGER:
            {
                SmtExpr rigthStr = SmtExprBuilder.mkIntToStr(right);
                SmtExpr concatExpr = SmtExprBuilder.mkStrConcat(left, rigthStr);
                return concatExpr;
            }
        case APPEND_BOOLEAN:
            {
                SmtIntConstant zero = SmtExprBuilder.ZERO_INT;
                SmtExpr eqZero = SmtExprBuilder.mkEq(right, zero);
                SmtStringConstant falseConstantExpr = SmtExprBuilder.mkStringConstant(String.valueOf(Boolean.FALSE));
                SmtStringConstant trueConstantExpr = SmtExprBuilder.mkStringConstant(String.valueOf(Boolean.TRUE));
                SmtExpr ite = SmtExprBuilder.mkITE(eqZero, falseConstantExpr, trueConstantExpr);
                SmtExpr concatExpr = SmtExprBuilder.mkStrConcat(left, ite);
                return concatExpr;
            }
        case APPEND_CHAR:
            {
                SmtExpr rigthStr = SmtExprBuilder.mkIntToChar(right);
                SmtExpr concatExpr = SmtExprBuilder.mkStrConcat(left, rigthStr);
                return concatExpr;
            }
        case APPEND_REAL:
            {
                String stringValue = e.getConcreteValue();
                SmtExpr strConstant = SmtExprBuilder.mkStringConstant(stringValue);
                return strConstant;
            }
        default:
            {
                throw new UnsupportedOperationException("Not implemented yet! " + op);
            }
    }
}
Also used : Operator(org.evosuite.symbolic.expr.Operator) SmtIntConstant(org.evosuite.symbolic.solver.smt.SmtIntConstant) SmtExpr(org.evosuite.symbolic.solver.smt.SmtExpr) SmtStringConstant(org.evosuite.symbolic.solver.smt.SmtStringConstant)

Example 22 with SmtExpr

use of org.evosuite.symbolic.solver.smt.SmtExpr in project evosuite by EvoSuite.

the class ExprToCVC4Visitor method visit.

@Override
public SmtExpr visit(StringBinaryComparison e, Void v) {
    Expression<String> leftOperand = e.getLeftOperand();
    Expression<?> rightOperand = e.getRightOperand();
    Operator op = e.getOperator();
    SmtExpr left = leftOperand.accept(this, null);
    SmtExpr right = rightOperand.accept(this, null);
    if (left == null || right == null) {
        return null;
    }
    if (!left.isSymbolic() && !right.isSymbolic()) {
        long longValue = e.getConcreteValue();
        SmtExpr intConst = SmtExprBuilder.mkIntConstant(longValue);
        return intConst;
    }
    SmtIntConstant oneConstant = SmtExprBuilder.ONE_INT;
    SmtIntConstant zeroConstant = SmtExprBuilder.ZERO_INT;
    switch(op) {
        case EQUALS:
            {
                SmtExpr equalsFormula = SmtExprBuilder.mkEq(left, right);
                SmtExpr ifThenElseFormula = SmtExprBuilder.mkITE(equalsFormula, oneConstant, zeroConstant);
                return ifThenElseFormula;
            }
        case ENDSWITH:
            {
                SmtExpr endsWithExpr = SmtExprBuilder.mkStrSuffixOf(right, left);
                SmtExpr ifThenElseFormula = SmtExprBuilder.mkITE(endsWithExpr, oneConstant, zeroConstant);
                return ifThenElseFormula;
            }
        case CONTAINS:
            {
                SmtExpr equalsFormula = SmtExprBuilder.mkStrContains(left, right);
                SmtExpr ifThenElseFormula = SmtExprBuilder.mkITE(equalsFormula, oneConstant, zeroConstant);
                return ifThenElseFormula;
            }
        case STARTSWITH:
            {
                throw new IllegalArgumentException("Illegal StringBinaryComparison operator " + op);
            }
        case PATTERNMATCHES:
            {
                String regex = e.getLeftOperand().getConcreteValue();
                String expandedRegex = RegexDistanceUtils.expandRegex(regex);
                RegExp regexp = new RegExp(expandedRegex, RegExp.INTERSECTION);
                RegExpToCVC4Visitor visitor = new RegExpToCVC4Visitor();
                SmtExpr regExpSmtExpr = visitor.visitRegExp(regexp);
                if (regExpSmtExpr == null) {
                    long longValue = e.getConcreteValue();
                    SmtExpr intConst = SmtExprBuilder.mkIntConstant(longValue);
                    return intConst;
                } else {
                    SmtExpr strInRegExp = SmtExprBuilder.mkStrInRegExp(right, regExpSmtExpr);
                    SmtExpr iteExpr = SmtExprBuilder.mkITE(strInRegExp, SmtExprBuilder.ONE_INT, SmtExprBuilder.ZERO_INT);
                    return iteExpr;
                }
            }
        case EQUALSIGNORECASE:
        case REGIONMATCHES:
        case APACHE_ORO_PATTERN_MATCHES:
            {
                long longValue = e.getConcreteValue();
                SmtExpr intConst = SmtExprBuilder.mkIntConstant(longValue);
                return intConst;
            }
        default:
            throw new UnsupportedOperationException("Not implemented yet! " + op);
    }
}
Also used : Operator(org.evosuite.symbolic.expr.Operator) SmtIntConstant(org.evosuite.symbolic.solver.smt.SmtIntConstant) RegExp(dk.brics.automaton.RegExp) SmtExpr(org.evosuite.symbolic.solver.smt.SmtExpr)

Example 23 with SmtExpr

use of org.evosuite.symbolic.solver.smt.SmtExpr in project evosuite by EvoSuite.

the class RegExpToCVC4Visitor method visitOptional.

@Override
public SmtExpr visitOptional(RegExp e) {
    SmtExpr expr = this.visitRegExp(e);
    if (expr == null) {
        return null;
    }
    SmtExpr optExpr = SmtExprBuilder.mkRegExpOptional(expr);
    return optExpr;
}
Also used : SmtExpr(org.evosuite.symbolic.solver.smt.SmtExpr)

Example 24 with SmtExpr

use of org.evosuite.symbolic.solver.smt.SmtExpr in project evosuite by EvoSuite.

the class RegExpToCVC4Visitor method visitUnion.

@Override
public SmtExpr visitUnion(RegExp left, RegExp right) {
    SmtExpr leftExpr = visitRegExp(left);
    SmtExpr rightExpr = visitRegExp(right);
    if (leftExpr == null || rightExpr == null) {
        return null;
    }
    SmtExpr unionExpr = SmtExprBuilder.mkRegExpUnion(leftExpr, rightExpr);
    return unionExpr;
}
Also used : SmtExpr(org.evosuite.symbolic.solver.smt.SmtExpr)

Example 25 with SmtExpr

use of org.evosuite.symbolic.solver.smt.SmtExpr in project evosuite by EvoSuite.

the class RegExpToCVC4Visitor method visitRepeat.

@Override
public SmtExpr visitRepeat(RegExp arg) {
    SmtExpr expr = this.visitRegExp(arg);
    if (expr == null) {
        return null;
    }
    SmtExpr repeatExpr = SmtExprBuilder.mkReKleeneStar(expr);
    return repeatExpr;
}
Also used : SmtExpr(org.evosuite.symbolic.solver.smt.SmtExpr)

Aggregations

SmtExpr (org.evosuite.symbolic.solver.smt.SmtExpr)60 Operator (org.evosuite.symbolic.expr.Operator)14 LinkedList (java.util.LinkedList)8 Comparator (org.evosuite.symbolic.expr.Comparator)6 SmtAssertion (org.evosuite.symbolic.solver.smt.SmtAssertion)6 SmtIntConstant (org.evosuite.symbolic.solver.smt.SmtIntConstant)6 SmtConstantDeclaration (org.evosuite.symbolic.solver.smt.SmtConstantDeclaration)5 Expression (org.evosuite.symbolic.expr.Expression)4 IntegerBinaryExpression (org.evosuite.symbolic.expr.bv.IntegerBinaryExpression)4 IntegerUnaryExpression (org.evosuite.symbolic.expr.bv.IntegerUnaryExpression)4 RealUnaryToIntegerExpression (org.evosuite.symbolic.expr.bv.RealUnaryToIntegerExpression)4 StringBinaryToIntegerExpression (org.evosuite.symbolic.expr.bv.StringBinaryToIntegerExpression)4 StringMultipleToIntegerExpression (org.evosuite.symbolic.expr.bv.StringMultipleToIntegerExpression)4 StringUnaryToIntegerExpression (org.evosuite.symbolic.expr.bv.StringUnaryToIntegerExpression)4 RealBinaryExpression (org.evosuite.symbolic.expr.fp.RealBinaryExpression)4 RealUnaryExpression (org.evosuite.symbolic.expr.fp.RealUnaryExpression)4 GetFieldExpression (org.evosuite.symbolic.expr.ref.GetFieldExpression)4 StringBinaryExpression (org.evosuite.symbolic.expr.str.StringBinaryExpression)4 StringMultipleExpression (org.evosuite.symbolic.expr.str.StringMultipleExpression)4 StringUnaryExpression (org.evosuite.symbolic.expr.str.StringUnaryExpression)4