package tests.terms.meta;
import static org.junit.jupiter.api.Assertions.*;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
import models.algebra.Variable;
import models.terms.DependencyTerm;
import models.terms.RDLTerm;
import models.terms.Resource;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;
import models.terms.meta.OrderVariableConstraint;
import tests.Utils;
public class SubstituteTest {
@Test
void MetaDependencyTermSubstituteTest() {
MetaResource x = new MetaResource(new Variable("x"));
MetaResource y = new MetaResource(new Variable("y"));
MetaEvaluatableTermVariable z = new MetaEvaluatableTermVariable(new Variable("z"));
MetaRDLTerm metaTerm1 = new MetaRDLTerm(x, y, z);
Resource a = new Resource("a", Utils.INT, 1);
Resource b = new Resource("b", Utils.INT, 1);
Resource c = new Resource("c", Utils.INT, 1);
DependencyTerm t1 = new DependencyTerm(a, b, c);
DependencyTerm t2 = new DependencyTerm(a, b, t1);
Map<Variable, RDLTerm> binding = new HashMap<>();
Map<Variable, OrderVariableConstraint> orderConstraint = new HashMap<>();
metaTerm1.isMatchedBy(t1, binding, orderConstraint);
RDLTerm assignedTerm = metaTerm1.substitute(binding);
assertEquals(t1, assignedTerm);
binding.clear();
orderConstraint.clear();
metaTerm1.isMatchedBy(t2, binding, orderConstraint);
assertEquals(t2, metaTerm1.substitute(binding));
}
}