174 lines
5.5 KiB
Java
174 lines
5.5 KiB
Java
package no.birkett.kiwi;
|
|
|
|
import org.junit.Test;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
|
|
|
public class Tests {
|
|
|
|
private static double EPSILON = 1.0e-8;
|
|
|
|
@Test
|
|
public void testKiwi() throws UnsatisfiableConstraintException, DuplicateConstraintException {
|
|
Solver solver = new Solver();
|
|
Variable x = new Variable("x");
|
|
Variable y = new Variable("y");
|
|
|
|
|
|
Term term = new Term(x);
|
|
|
|
Expression expression = new Expression(term);
|
|
|
|
Constraint constraint = new Constraint(expression, RelationalOperator.OP_EQ);
|
|
|
|
solver.addConstraint(constraint);
|
|
solver.updateVariables();
|
|
}
|
|
|
|
/*@Test
|
|
public void simple1() {
|
|
Variable x = new Variable(167);
|
|
Variable y = new Variable(2);
|
|
Solver solver = new Solver();
|
|
|
|
Constraint eq = new Constraint(x, Constraint.Operator.EQ, new Expression(y));
|
|
//ClLinearEquation eq = new ClLinearEquation(x, new ClLinearExpression(y));
|
|
solver.addConstraint(eq);
|
|
assertEquals(x.value(), y.value(), EPSILON);
|
|
}
|
|
|
|
|
|
@Test
|
|
public void addDelete1() {
|
|
Variable x = new Variable("x");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.EQ, 100, Strength.WEAK));
|
|
|
|
Constraint c10 = new Constraint(x, Constraint.Operator.LEQ, 10.0);
|
|
Constraint c20 = new Constraint(x, Constraint.Operator.LEQ, 20.0);
|
|
|
|
solver.addConstraint(c10);
|
|
solver.addConstraint(c20);
|
|
|
|
assertEquals(10, x.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c10);
|
|
assertEquals(20, x.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c20);
|
|
assertEquals(100, x.value(), EPSILON);
|
|
|
|
Constraint c10again = new Constraint(x, Constraint.Operator.LEQ, 10.0);
|
|
|
|
solver.addConstraint(c10);
|
|
solver.addConstraint(c10again);
|
|
|
|
assertEquals(10, x.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c10);
|
|
assertEquals(10, x.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c10again);
|
|
assertEquals(100, x.value(), EPSILON);
|
|
}
|
|
|
|
|
|
@Test
|
|
public void addDelete2() {
|
|
Variable x = new Variable("x");
|
|
Variable y = new Variable("y");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.EQ, 100.0, Strength.WEAK));
|
|
solver.addConstraint(new Constraint(y, Constraint.Operator.EQ, 120.0, Strength.STRONG));
|
|
|
|
|
|
Constraint c10 = new Constraint(x, Constraint.Operator.LEQ, 10.0);
|
|
Constraint c20 = new Constraint(x, Constraint.Operator.LEQ, 20.0);
|
|
|
|
solver.addConstraint(c10);
|
|
solver.addConstraint(c20);
|
|
|
|
assertEquals(10, x.value(), EPSILON);
|
|
assertEquals(120, y.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c10);
|
|
assertEquals(20, x.value(), EPSILON);
|
|
assertEquals(120, y.value(), EPSILON);
|
|
|
|
Constraint cxy = new Constraint(x.times(2.0), Constraint.Operator.EQ, y);
|
|
solver.addConstraint(cxy);
|
|
assertEquals(20, x.value(), EPSILON);
|
|
assertEquals(40, y.value(), EPSILON);
|
|
|
|
solver.removeConstraint(c20);
|
|
assertEquals(60, x.value(), EPSILON);
|
|
assertEquals(120, y.value(), EPSILON);
|
|
|
|
solver.removeConstraint(cxy);
|
|
assertEquals(100, x.value(), EPSILON);
|
|
assertEquals(120, y.value(), EPSILON);
|
|
}
|
|
|
|
@Test
|
|
public void casso1() {
|
|
Variable x = new Variable("x");
|
|
Variable y = new Variable("y");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.LEQ, y));
|
|
solver.addConstraint(new Constraint(y, Constraint.Operator.EQ, x.plus(3.0)));
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.EQ, 10.0, Strength.WEAK));
|
|
solver.addConstraint(new Constraint(y, Constraint.Operator.EQ, 10.0, Strength.WEAK));
|
|
|
|
if (Math.abs(x.getValue() - 10.0) < EPSILON) {
|
|
assertEquals(10, x.value(), EPSILON);
|
|
assertEquals(13, y.value(), EPSILON);
|
|
} else {
|
|
assertEquals(7, x.value(), EPSILON);
|
|
assertEquals(10, y.value(), EPSILON);
|
|
}
|
|
}
|
|
|
|
@Test(expected = RequiredFailure.class)
|
|
public void inconsistent1() throws InternalError {
|
|
Variable x = new Variable("x");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.EQ, 10.0));
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.EQ, 5.0));
|
|
}
|
|
|
|
|
|
@Test(expected = RequiredFailure.class)
|
|
public void inconsistent2() {
|
|
Variable x = new Variable("x");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.GEQ, 10.0));
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.LEQ, 5.0));
|
|
}
|
|
|
|
|
|
|
|
@Test(expected = RequiredFailure.class)
|
|
public void inconsistent3() {
|
|
|
|
Variable w = new Variable("w");
|
|
Variable x = new Variable("x");
|
|
Variable y = new Variable("y");
|
|
Variable z = new Variable("z");
|
|
Solver solver = new Solver();
|
|
|
|
solver.addConstraint(new Constraint(w, Constraint.Operator.GEQ, 10.0));
|
|
solver.addConstraint(new Constraint(x, Constraint.Operator.GEQ, w));
|
|
solver.addConstraint(new Constraint(y, Constraint.Operator.GEQ, x));
|
|
solver.addConstraint(new Constraint(z, Constraint.Operator.GEQ, y));
|
|
solver.addConstraint(new Constraint(z, Constraint.Operator.GEQ, 8.0));
|
|
solver.addConstraint(new Constraint(z, Constraint.Operator.LEQ, 4.0));
|
|
}*/
|
|
|
|
}
|