package tests.terms.meta;
import static org.junit.jupiter.api.Assertions.*;
import static tests.Utils.*;
import org.junit.jupiter.api.Test;
import models.algebra.Constant;
import models.algebra.Variable;
import models.terms.Dependency;
import models.terms.DependencyTerm;
import models.terms.Resource;
import models.terms.meta.MetaDependencyVariable;
import models.terms.meta.OrderConstraint;
public class MetaDependencyVariableTest {
@Test
void MetaDependencyVariableMatchingWithoutOrderTest() {
Resource a = new Resource("a", INT, 1);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 1);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(dep1);
DependencyTerm te1 = new DependencyTerm(a, b, c);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"));
// [a : b] mathces d(dependency)
assertTrue(d.isMatchedBy(dep1));
// [[a : b]] mathces d(dependency)
assertTrue(d.isMatchedBy(dep2));
// a does not mathc d(dependency)
assertFalse(d.isMatchedBy(a));
// [a : b -> c] does not mathc d(dependency)
assertFalse(d.isMatchedBy(te1));
}
@Test
void MetaDependencyVariableMatchingWithConstantOrderEQTest() {
Resource a = new Resource("a", INT, 1);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 2);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(a, c);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), new Constant("1"));
// [a : b](1) mathces d(=1)
assertTrue(d.isMatchedBy(dep1));
// [a : c](2) does not mathc d(=1)
assertFalse(d.isMatchedBy(dep2));
}
@Test
void MetaDependencyVariableMatchingWithConstantOrderLTTest() {
Resource a = new Resource("a", INT, 0);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 2);
Resource e = new Resource("e", INT, 0);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(a, c);
Dependency dep3 = new Dependency(a, e);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.LT, new Constant("1"));
// [a : b](1) does not match d(<1)
assertFalse(d.isMatchedBy(dep1));
// [a : c](2) does not match d(<1)
assertFalse(d.isMatchedBy(dep2));
// [a : e](0) matches d(<1)
assertTrue(d.isMatchedBy(dep3));
}
@Test
void MetaDependencyVariableMatchingWithConstantOrderLETest() {
Resource a = new Resource("a", INT, 0);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 2);
Resource e = new Resource("e", INT, 0);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(a, c);
Dependency dep3 = new Dependency(a, e);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.LE, new Constant("1"));
// [a : b](1) matches d(<=1)
assertTrue(d.isMatchedBy(dep1));
// [a : c](2) does not match d(<=1)
assertFalse(d.isMatchedBy(dep2));
// [a : e](0) matches d(<=1)
assertTrue(d.isMatchedBy(dep3));
}
@Test
void MetaDependencyVariableMatchingWithConstantOrderGTTest() {
Resource a = new Resource("a", INT, 0);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 2);
Resource e = new Resource("e", INT, 0);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(a, c);
Dependency dep3 = new Dependency(a, e);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.GT, new Constant("1"));
// [a : b](1) does not match d(>1)
assertFalse(d.isMatchedBy(dep1));
// [a : c](2) matches d(>1)
assertTrue(d.isMatchedBy(dep2));
// [a : e](0) does not match d(>1)
assertFalse(d.isMatchedBy(dep3));
}
@Test
void MetaDependencyVariableMatchingWithConstantOrderGETest() {
Resource a = new Resource("a", INT, 0);
Resource b = new Resource("b", INT, 1);
Resource c = new Resource("c", INT, 2);
Resource e = new Resource("e", INT, 0);
Dependency dep1 = new Dependency(a, b);
Dependency dep2 = new Dependency(a, c);
Dependency dep3 = new Dependency(a, e);
MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.GE, new Constant("1"));
// [a : b](1) matches d(>=1)
assertTrue(d.isMatchedBy(dep1));
// [a : c](2) matches d(>=1)
assertTrue(d.isMatchedBy(dep2));
// [a : e](0) does not match d(>=1)
assertFalse(d.isMatchedBy(dep3));
}
}