/**
* Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>.
*/
/**
*
*/
package org.evosuite.symbolic.solver.avm;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.evosuite.Properties;
import org.evosuite.RandomizedTC;
import org.evosuite.symbolic.expr.Comparator;
import org.evosuite.symbolic.expr.Constraint;
import org.evosuite.symbolic.expr.IntegerConstraint;
import org.evosuite.symbolic.expr.Operator;
import org.evosuite.symbolic.expr.bv.IntegerBinaryExpression;
import org.evosuite.symbolic.expr.bv.IntegerConstant;
import org.evosuite.symbolic.expr.bv.IntegerValue;
import org.evosuite.symbolic.expr.bv.IntegerVariable;
import org.evosuite.symbolic.expr.bv.StringBinaryToIntegerExpression;
import org.evosuite.symbolic.expr.str.StringConstant;
import org.evosuite.symbolic.solver.SolverEmptyQueryException;
import org.evosuite.symbolic.solver.SolverResult;
import org.evosuite.symbolic.solver.SolverTimeoutException;
import org.evosuite.symbolic.solver.avm.EvoSuiteSolver;
import org.junit.After;
import org.junit.Test;
/**
* @author fraser
*
*/
public class TestIntegerSearch extends RandomizedTC {
private static final int DEFAULT_DSE_VARIABLE_RESETS = Properties.DSE_VARIABLE_RESETS ;
@After
public void restoreDSEVariableResets() {
Properties.DSE_VARIABLE_RESETS = DEFAULT_DSE_VARIABLE_RESETS;
}
@Test
public void testEQConstant() throws SolverEmptyQueryException {
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 0, -1000000, 1000000), Comparator.EQ,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model);
assertNotNull(model.get("test1"));
assertEquals(235082, ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testNEConstant() throws SolverEmptyQueryException {
// TODO: Currently, the model returned by the search is null if the
// constraint is already satisfied,
// so in this example the concrete value has to be the target initially
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 235082, -1000000, 1000000), Comparator.NE,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model.get("test1"));
assertTrue(235082 != ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLEConstant() throws SolverEmptyQueryException {
// TODO: Currently, the model returned by the search is null if the
// constraint is already satisfied,
// so in this example the concrete value has to be the target initially
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 235086, -1000000, 1000000), Comparator.LE,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model.get("test1"));
assertTrue(235082 >= ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLTConstant() throws SolverEmptyQueryException {
// TODO: Currently, the model returned by the search is null if the
// constraint is already satisfied,
// so in this example the concrete value has to be the target initially
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 235086, -1000000, 1000000), Comparator.LT,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model.get("test1"));
assertTrue(235082 > ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGEConstant() throws SolverEmptyQueryException {
// TODO: Currently, the model returned by the search is null if the
// constraint is already satisfied,
// so in this example the concrete value has to be the target initially
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 0, -1000000, 1000000), Comparator.GE,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model.get("test1"));
assertTrue(235082 <= ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGTConstant() throws SolverEmptyQueryException {
// TODO: Currently, the model returned by the search is null if the
// constraint is already satisfied,
// so in this example the concrete value has to be the target initially
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", 0, -1000000, 1000000), Comparator.GT,
new IntegerConstant(235082)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
assertNotNull(model.get("test1"));
assertTrue(235082 < ((Number) model.get("test1")).intValue());
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEQVariable() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.EQ,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertEquals(var1, var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testNEVariable() throws SolverEmptyQueryException {
int var1 = 1;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.NE,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 != var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLEVariable() throws SolverEmptyQueryException {
int var1 = 2;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LE,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 <= var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLTVariable() throws SolverEmptyQueryException {
int var1 = 2;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LT,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 < var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGEVariable() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.GE,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 >= var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGTVariable() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.GT,
new IntegerVariable("test2", var2, -1000000, 1000000)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 > var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEQArithmetic() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
int var3 = 1;
assertTrue(var1 != var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.EQ,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 == var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testNEArithmetic() throws SolverEmptyQueryException {
int var1 = 2;
int var2 = 1;
int var3 = 1;
assertTrue(var1 == var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.NE,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 != var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLEArithmetic() throws SolverEmptyQueryException {
int var1 = 3;
int var2 = 1;
int var3 = 1;
assertTrue(var1 > var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LE,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 <= var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testLTArithmetic() throws SolverEmptyQueryException {
int var1 = 2;
int var2 = 1;
int var3 = 1;
assertTrue(var1 >= var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LT,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 < var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGEArithmetic() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
int var3 = 1;
assertTrue(var1 < var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.GT,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 >= var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testGTArithmetic() throws SolverEmptyQueryException {
int var1 = 0;
int var2 = 1;
int var3 = 1;
assertTrue(var1 <= var2 + var3);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.GE,
new IntegerBinaryExpression(new IntegerVariable("test2", var2, -1000000, 1000000), Operator.PLUS,
new IntegerVariable("test3", var3, -1000000, 1000000), 0L)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
if (model.containsKey("test3"))
var3 = ((Number) model.get("test3")).intValue();
assertTrue(var1 >= var2 + var3);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEvosuiteExample1() throws SolverEmptyQueryException {
int var1 = 1;
int var2 = 1;
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LE,
new IntegerConstant(0)));
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.LT,
new IntegerVariable("test2", var2, -1000000, 1000000)));
constraints.add(new IntegerConstraint(new IntegerVariable("test1", var1, -1000000, 1000000), Comparator.GE,
new IntegerConstant(0)));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertEquals(0, var1);
assertTrue(var1 < var2);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEvosuiteExample3() throws SolverEmptyQueryException {
Properties.DSE_VARIABLE_RESETS = 3;
// (var42__SYM(25721) * (var22__SYM(-1043) - 6860)) == 8275
int var1 = 25721;
int var2 = -1043;
IntegerConstant iconst1 = new IntegerConstant(6860);
IntegerConstant iconst2 = new IntegerConstant(8275);
IntegerVariable ivar1 = new IntegerVariable("test1", var1, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable ivar2 = new IntegerVariable("test2", var2, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerBinaryExpression sub = new IntegerBinaryExpression(ivar2, Operator.MINUS, iconst1, -7903L);
IntegerBinaryExpression mul = new IntegerBinaryExpression(ivar1, Operator.MUL, sub, -203273063L);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(mul, Comparator.EQ, iconst2));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
var1 = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
var2 = ((Number) model.get("test2")).intValue();
assertTrue(var1 * (var2 - 6860) == 8275);
} catch (SolverTimeoutException e) {
fail();
}
}
private static IntegerValue mul(IntegerValue left, IntegerValue right) {
int left_val = left.getConcreteValue().intValue();
int right_val = right.getConcreteValue().intValue();
return new IntegerBinaryExpression(left, Operator.MUL, right, (long) left_val * right_val);
}
private static IntegerValue div(IntegerValue left, IntegerValue right) {
int left_val = left.getConcreteValue().intValue();
int right_val = right.getConcreteValue().intValue();
return new IntegerBinaryExpression(left, Operator.DIV, right, (long) left_val / right_val);
}
private static IntegerValue sub(IntegerValue left, IntegerValue right) {
int left_val = left.getConcreteValue().intValue();
int right_val = right.getConcreteValue().intValue();
return new IntegerBinaryExpression(left, Operator.MINUS, right, (long) left_val - right_val);
}
private static IntegerValue rem(IntegerValue left, IntegerValue right) {
int left_val = left.getConcreteValue().intValue();
int right_val = right.getConcreteValue().intValue();
return new IntegerBinaryExpression(left, Operator.REM, right, (long) left_val % right_val);
}
@Test
public void testEvosuiteExample4_1() throws SolverEmptyQueryException {
IntegerVariable var24 = new IntegerVariable("var24", 21458, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable var10 = new IntegerVariable("var10", 1172, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable var14 = new IntegerVariable("var14", -1903, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerConstant c_19072 = new IntegerConstant(19072);
IntegerConstant c_11060 = new IntegerConstant(11060);
IntegerValue left = mul(sub(var24, div(var10, var14)), c_19072);
IntegerValue right = c_11060;
IntegerConstraint constr = new IntegerConstraint(left, Comparator.LT, right);
List<Constraint<?>> constraints = Collections.<Constraint<?>> singletonList(constr);
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
int v_24 = ((Number) model.get("var24")).intValue();
int v_10 = ((Number) model.get("var10")).intValue();
int v_14 = ((Number) model.get("var14")).intValue();
assertTrue((v_24 - (v_10 / v_14) * 19072) < 11060);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEvosuiteExample4_2() throws SolverEmptyQueryException {
IntegerVariable var20 = new IntegerVariable("var20", 17433, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable var39 = new IntegerVariable("var39", -1819, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable var40 = new IntegerVariable("var40", -1819, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerConstant c_11060 = new IntegerConstant(11060);
IntegerConstant c_12089 = new IntegerConstant(12089);
IntegerConstant c_14414 = new IntegerConstant(14414);
IntegerValue left = sub(mul(c_12089, var40), rem(mul(var39, c_14414), var20));
IntegerValue right = c_11060;
IntegerConstraint constr = new IntegerConstraint(left, Comparator.GT, right);
List<Constraint<?>> constraints = Collections.<Constraint<?>> singletonList(constr);
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
int v_20 = ((Number) model.get("var20")).intValue();
int v_39 = ((Number) model.get("var39")).intValue();
int v_40 = ((Number) model.get("var40")).intValue();
assertTrue((12089 * v_40) - ((v_39 * 14414) % v_20) > 11060);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEvosuiteExample5() throws SolverEmptyQueryException {
// TestSuiteDSE.setStart();
// Cnstr 0 : var6__SYM(84) != (y charAt 0) dist: 8.0
// Cnstr 1 : var6__SYM(84) != 115 dist: 8.0
// Cnstr 2 : var6__SYM(84) == 108 dist: 8.0
int var1 = 84;
int const1 = 115;
int const2 = 108;
String const3 = "y";
IntegerConstant iconst1 = new IntegerConstant(const1);
IntegerConstant iconst2 = new IntegerConstant(const2);
StringConstant strConst = new StringConstant(const3);
IntegerVariable ivar1 = new IntegerVariable("test1", var1, Integer.MIN_VALUE, Integer.MAX_VALUE);
StringBinaryToIntegerExpression sBExpr = new StringBinaryToIntegerExpression(strConst, Operator.CHARAT,
new IntegerConstant(0), (long) "y".charAt(0));
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(ivar1, Comparator.NE, sBExpr));
constraints.add(new IntegerConstraint(ivar1, Comparator.NE, iconst1));
constraints.add(new IntegerConstraint(ivar1, Comparator.EQ, iconst2));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
var1 = ((Number) model.get("test1")).intValue();
assertTrue(var1 == 108);
} catch (SolverTimeoutException e) {
fail();
}
}
@Test
public void testEvosuiteExample6() throws SolverEmptyQueryException {
Properties.DSE_VARIABLE_RESETS = 3;
// Cnstr 0 : var2__SYM(1890) >= 0 dist: 682.3333333333334
// Cnstr 1 : var1__SYM(-157) <= 0 dist: 682.3333333333334
// Cnstr 2 : var2__SYM(1890) <= var1__SYM(-157) dist: 682.3333333333334
// y >= 0
// x <= 0
// y <= x
int x = -157;
int y = 1890;
// TestSuiteDSE.setStart();
// int x = 879254357;
// int y = 1013652704;
IntegerVariable ivar1 = new IntegerVariable("test1", x, Integer.MIN_VALUE, Integer.MAX_VALUE);
IntegerVariable ivar2 = new IntegerVariable("test2", y, Integer.MIN_VALUE, Integer.MAX_VALUE);
List<Constraint<?>> constraints = new ArrayList<Constraint<?>>();
constraints.add(new IntegerConstraint(ivar2, Comparator.GE, new IntegerConstant(0)));
constraints.add(new IntegerConstraint(ivar1, Comparator.LE, new IntegerConstant(0)));
constraints.add(new IntegerConstraint(ivar2, Comparator.LE, ivar1));
try {
EvoSuiteSolver solver = new EvoSuiteSolver();
SolverResult solverResult = solver.solve(constraints);
assertTrue(solverResult.isSAT());
Map<String, Object> model = solverResult.getModel();
if (model.containsKey("test1"))
x = ((Number) model.get("test1")).intValue();
if (model.containsKey("test2"))
y = ((Number) model.get("test2")).intValue();
assertTrue(y >= 0);
assertTrue(x <= 0);
assertTrue(y <= x);
} catch (SolverTimeoutException e) {
fail();
}
}
}