package tests.terms.meta;
import static org.junit.jupiter.api.Assertions.*;
import static tests.Utils.*;
import org.junit.jupiter.api.Test;
import models.algebra.Variable;
import models.terms.Dependency;
import models.terms.DependencyTerm;
import models.terms.Resource;
import models.terms.meta.MetaDependencyTermVariable;
import models.terms.meta.MetaDependencyVariable;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTermVariable;
import models.terms.meta.MetaResource;
import models.terms.meta.OrderConstraint;
public class MetaResourceVariableTest {
@Test
void MetaResourceVariableMathcingWithoutOrder() {
Resource a = new Resource("a", INT, 0);
Resource b = new Resource("b", INT, 0);
Resource c = new Resource("c", INT, 0);
Dependency dep = new Dependency(a, b);
DependencyTerm depTerm = new DependencyTerm(a, b, c);
MetaResource x = new MetaResource(new Variable("x"));
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"));
MetaDependencyTermVariable dte = new MetaDependencyTermVariable(new Variable("dte"));
MetaEvaluatableTermVariable te = new MetaEvaluatableTermVariable(new Variable("te"));
MetaRDLTermVariable t = new MetaRDLTermVariable(new Variable("t"));
// a matches x(resource variable)
assertTrue(x.isMatchedBy(a));
// a does not match d(dependency)
assertFalse(d.isMatchedBy(a));
// a does not match dte(dependency term)
assertFalse(dte.isMatchedBy(a));
// a matches te(evaluatable term)
assertTrue(te.isMatchedBy(a));
// a matches t(term)
assertTrue(t.isMatchedBy(a));
// [a : b] does not match x(resource variable)
assertFalse(x.isMatchedBy(dep));
// [a : b -> c] does not match x(resource variable)
assertFalse(x.isMatchedBy(depTerm));
}
@Test
void MetaResourceVariableMathcingWithConstantOrderEQ() {
Resource a = new Resource("a", INT, 1);
MetaResource x = new MetaResource(new Variable("x"), parse("0"));
MetaResource y = new MetaResource(new Variable("y"), parse("1"));
//a(1) does not match x(=0)
assertFalse(x.isMatchedBy(a));
//a(1) matches y(=1)
assertTrue(y.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithConstantOrderLT() {
Resource a = new Resource("a", INT, 1);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.LT, parse("0"));
MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.LT, parse("1"));
MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.LT, parse("2"));
//a(1) does not match x(<0)
assertFalse(x.isMatchedBy(a));
//a(1) matches y(<1)
assertFalse(y.isMatchedBy(a));
//a(1) matches z(<2)
assertTrue(z.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithConstantOrderLE() {
Resource a = new Resource("a", INT, 1);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.LE, parse("0"));
MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.LE, parse("1"));
MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.LE, parse("2"));
//a(1) does not match x(<=0)
assertFalse(x.isMatchedBy(a));
//a(1) matches y(<=1)
assertTrue(y.isMatchedBy(a));
//a(1) matches z(<=2)
assertTrue(z.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithConstantOrderGT() {
Resource a = new Resource("a", INT, 1);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.GT, parse("0"));
MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.GT, parse("1"));
MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.GT, parse("2"));
//a(1) does not match x(>0)
assertTrue(x.isMatchedBy(a));
//a(1) matches y(>1)
assertFalse(y.isMatchedBy(a));
//a(1) matches z(>2)
assertFalse(z.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithConstantOrderGE() {
Resource a = new Resource("a", INT, 1);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.GE, parse("0"));
MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.GE, parse("1"));
MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.GE, parse("2"));
//a(1) does not match x(>=0)
assertTrue(x.isMatchedBy(a));
//a(1) matches y(>=1)
assertTrue(y.isMatchedBy(a));
//a(1) matches z(>2)
assertFalse(z.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithVariableOrderEq() {
Resource a = new Resource("a", INT, 0);
MetaResource x = new MetaResource(new Variable("x"), parse("x"));
//a(0) matches x(=x)
assertTrue(x.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithVariableOrderLT() {
Resource a = new Resource("a", INT, 2);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.LT, parse("x"));
//a(2) matches x(<x)
assertTrue(x.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithVariableOrderLE() {
Resource a = new Resource("a", INT, 2);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.LE, parse("x"));
//a(2) matches x(<=x)
assertTrue(x.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithVariableOrderGT() {
Resource a = new Resource("a", INT, 2);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.GT, parse("x"));
//a(2) matches x(>x)
assertTrue(x.isMatchedBy(a));
}
@Test
void MetaResourceVariableMathcingWithVariableOrderGE() {
Resource a = new Resource("a", INT, 2);
MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.GE, parse("x"));
//a(2) matches x(<x)
assertTrue(x.isMatchedBy(a));
}
}