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.ResourceVariable;
import models.terms.meta.MetaDependencyTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResourceVariable;
public class MetaRDLTermTest {
@Test
void MetaDependencyMatchingWithoutOrderTest() {
ResourceVariable a = new ResourceVariable("a", INT, 1);
ResourceVariable b = new ResourceVariable("b", INT, 1);
ResourceVariable c = new ResourceVariable("c", INT, 1);
Dependency dep1 = new Dependency(a, b);
DependencyTerm te1 = new DependencyTerm(a, b, c);
Dependency dep2 = new Dependency(te1, b);
MetaResourceVariable v1 = new MetaResourceVariable(new Variable("v1"));
MetaResourceVariable v2 = new MetaResourceVariable(new Variable("v2"));
MetaResourceVariable v3 = new MetaResourceVariable(new Variable("v3"));
MetaDependencyTermVariable vte = new MetaDependencyTermVariable(new Variable("vte"));
MetaRDLTerm metaDep = new MetaRDLTerm(v1, v2);
MetaRDLTerm metaDep2 = new MetaRDLTerm(vte, v2);
MetaRDLTerm metaTe = new MetaRDLTerm(v1, v2, v3);
MetaRDLTerm metaDep3 = new MetaRDLTerm(metaTe, v2);
MetaRDLTerm metaDep4 = new MetaRDLTerm(metaTe, v3);
//[a : b] matches [v1 : v2]
assertTrue(metaDep.isMatchedBy(dep1));
//[[a : b -> c] : b] does not match [v1 : v2]
assertFalse(metaDep.isMatchedBy(dep2));
//[[a : b -> c] : b] matches [vte : v2]
assertTrue(metaDep2.isMatchedBy(dep2));
//[[a : b -> c] : b] matches [[v1 : v2 -> v3] : v2]
assertTrue(metaDep3.isMatchedBy(dep2));
//[[a : b -> c] : b] does not match [[v1 : v2 -> v3] : v3]
assertFalse(metaDep4.isMatchedBy(dep2));
}
}