/*******************************************************************************
* Copyright 2014 Felipe Takiyama
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package br.usp.poli.takiyama.prv;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import br.usp.poli.takiyama.common.Constraint;
import br.usp.poli.takiyama.common.InequalityConstraint;
import br.usp.poli.takiyama.utils.Sets;
/**
* Not really a JUnit Test. One must check manually if the tests are correct.
* TODO Make it automatic.
* @author ftakiyama
*
*/
@RunWith(Enclosed.class)
public class SubstitutionTest {
// @Test
// public void createSimpleSubstitution() {
// List<Binding> bindings = new Vector<Binding>();
// LogicalVariable t1 = new LogicalVariable("MyLogicalVariable");
// Constant t2 = new Constant("myConstant");
// LogicalVariable t3 = new LogicalVariable("AnotherLogicalVariable");
// Constant t4 = new Constant("anotherConstant");
// bindings.add(Binding.getInstance(t1, t2));
// bindings.add(Binding.getInstance(t3, t4));
//
// for (LogicalVariable v : Substitution.getInstance(bindings).getLogicalVariables()) {
// System.out.println(v.toString() + " " + Substitution.getInstance(bindings).getReplacement(v));
// }
// }
/**
* Tests to verify whether a substitution is consistent with a set of
* constraints.
*/
@RunWith(Parameterized.class)
public static class ConstraintConsistencyTest {
private static LogicalVariable a = StdLogicalVariable.getInstance("A", "x", 10);
private static LogicalVariable b = StdLogicalVariable.getInstance("B", "x", 10);
private static Constant x1 = Constant.getInstance("x1");
private static Constant x2 = Constant.getInstance("x2");
private static Set<Constraint> noConstraint = new HashSet<Constraint>(0);
private static Set<Constraint> constraint_A_x1 = Sets.setOf(InequalityConstraint.getInstance(a, x1));
private static Set<Constraint> constraint_A_B = Sets.setOf(InequalityConstraint.getInstance(a, b));
private static Binding a_x1 = Binding.getInstance(a, x1);
private static Binding a_x2 = Binding.getInstance(a, x2);
private static Binding a_b = Binding.getInstance(a, b);
private static Binding b_x1 = Binding.getInstance(b, x1);
private static Binding b_x2 = Binding.getInstance(b, x2);
private static Binding b_a = Binding.getInstance(b, a);
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{noConstraint, Substitution.getInstance(), Boolean.TRUE},
{noConstraint, Substitution.getInstance(a_x1), Boolean.TRUE},
{noConstraint, Substitution.getInstance(a_b), Boolean.TRUE},
{constraint_A_x1, Substitution.getInstance(a_x1), Boolean.FALSE},
{constraint_A_x1, Substitution.getInstance(a_x2), Boolean.TRUE},
{constraint_A_x1, Substitution.getInstance(), Boolean.TRUE},
{constraint_A_B, Substitution.getInstance(a_b), Boolean.FALSE},
{constraint_A_B, Substitution.getInstance(a_x1, b_x1), Boolean.FALSE},
{constraint_A_B, Substitution.getInstance(b_a), Boolean.FALSE},
{constraint_A_B, Substitution.getInstance(), Boolean.TRUE},
{constraint_A_B, Substitution.getInstance(a_x1), Boolean.TRUE},
{constraint_A_B, Substitution.getInstance(b_x1), Boolean.TRUE},
{constraint_A_B, Substitution.getInstance(a_x1, b_x2), Boolean.TRUE},
});
}
private Set<Constraint> constraints;
private Substitution substitution;
private Boolean expected;
public ConstraintConsistencyTest(Set<Constraint> c, Substitution s, Boolean b) {
constraints = c;
substitution = s;
expected = b;
}
@Test
public void constraintConsistencyTest() {
assertEquals(expected.booleanValue(), substitution.isConsistentWith(constraints));
}
}
}