Newer
Older
RDLProofSystem / src / test / java / terms / meta / MetaDependencyTermTest.java
@Sakoda2269 Sakoda2269 6 hours ago 4 KB dynamicTermのisMatchedByまで
package terms.meta;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import models.algebra.Variable;
import models.terms.DependencyTerm;
import models.terms.RDLTerm;
import models.terms.Resource;
import models.terms.meta.MatchConstraint;
import models.terms.meta.MetaDependencyTerm;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;
import models.terms.meta.OrderVariableConstraint;
import utils.Utils;

public class MetaDependencyTermTest {

	Resource a = new Resource("a", Utils.INT, 1);
	Resource b = new Resource("b", Utils.INT, 1);
	Resource c = new Resource("c", Utils.INT, 1);
	Resource d = new Resource("d", Utils.INT, 1);
	Resource e = new Resource("e", Utils.INT, 1);
	Resource f = new Resource("f", Utils.INT, 1);
	Resource g = new Resource("g", Utils.INT, 1);
	
	@Test
	void MatchTest() {
		DependencyTerm t1 = new DependencyTerm(a, b, c, d, e);
		DependencyTerm t2 = new DependencyTerm(a, g, f, b, c);
		MetaResource x = new MetaResource(new Variable("x"));
		MetaResource y = new MetaResource(new Variable("y"));
		MetaResource z = new MetaResource(new Variable("z"));
		MetaResource w = new MetaResource(new Variable("w"));
		MetaResource p = new MetaResource(new Variable("p"));
		MetaResource o = new MetaResource(new Variable("o"));
		MetaResource n = new MetaResource(new Variable("n"));
		MetaRDLTerm mt1 = new MetaDependencyTerm(x, y, z, w, p);
		MetaRDLTerm mt2 = new MetaDependencyTerm(x, w, p, y, z);
		MetaRDLTerm mt3 = new MetaDependencyTerm(x, p, w, y, z);
		MetaRDLTerm mt4 = new MetaDependencyTerm(x, n, o, w, p);
		Map<Variable, RDLTerm> binding = new HashMap<>();
		Map<Variable, OrderVariableConstraint> orderConstraint = new HashMap<>();
		Map<Variable, RDLTerm> correctBinding = new HashMap<>();
		correctBinding.put(x.getVariableName(), a);
		correctBinding.put(y.getVariableName(), d);
		correctBinding.put(z.getVariableName(), e);
		correctBinding.put(w.getVariableName(), b);
		correctBinding.put(p.getVariableName(), c);
		mt4.toString();
		Set<MatchConstraint> tmp = mt1.isMatchedBy(t1, new MatchConstraint(binding, orderConstraint));
		assertTrue(! tmp.isEmpty());
		tmp = mt2.isMatchedBy(t1, tmp);
		assertTrue(! tmp.isEmpty());
		assertFalse(! mt3.isMatchedBy(t1, tmp).isEmpty());
		assertTrue(! mt4.isMatchedBy(t2, tmp).isEmpty());
		RDLTerm t = mt1.substitute(tmp.iterator().next().getBinding());
		assertEquals(t, t1);
	}
	
	@Test
	void MatchTest2() {
		MetaResource x = new MetaResource(new Variable("x"));
		MetaResource y = new MetaResource(new Variable("y"));
		MetaResource z = new MetaResource(new Variable("z"));
		MetaResource v = new MetaResource(new Variable("v"));
		MetaResource w = new MetaResource(new Variable("w"));
		MetaResource p = new MetaResource(new Variable("p"));
		MetaResource q = new MetaResource(new Variable("q"));
		
		DependencyTerm t1 = new DependencyTerm(a, b, c, d, e);
		DependencyTerm t2 = new DependencyTerm(a, d, e, f, g);
		MetaRDLTerm mt1 = new MetaDependencyTerm(x, p, q, v, w);
		MetaRDLTerm mt2 = new MetaDependencyTerm(x, v, w, y, z);
		Map<Variable, RDLTerm> binding = new HashMap<>();
		Map<Variable, OrderVariableConstraint> orderConstraint = new HashMap<>();
		Set<MatchConstraint> tmp = mt1.isMatchedBy(t1, new MatchConstraint(binding, orderConstraint));
		assertTrue(! tmp.isEmpty());
		tmp = mt2.isMatchedBy(t2, tmp);
		assertTrue(! tmp.isEmpty());
	}
	
	@Test
	void MatchTest3() {
		DependencyTerm t1 = new DependencyTerm(a, b, c, d, e);
		DependencyTerm t2 = new DependencyTerm(c, f, g);
		MetaResource o = new MetaResource(new Variable("o"));
		MetaResource p = new MetaResource(new Variable("p"));
		MetaResource q = new MetaResource(new Variable("q"));
		MetaResource r = new MetaResource(new Variable("r"));
		MetaResource s = new MetaResource(new Variable("s"));
		MetaResource t = new MetaResource(new Variable("t"));
		MetaResource u = new MetaResource(new Variable("u"));
		MetaRDLTerm mt1 = new MetaDependencyTerm(o, p, q, r, s);
		MetaRDLTerm mt2 = new MetaDependencyTerm(s, t, u);
		Set<MatchConstraint> tmp = mt1.isMatchedBy(t1);
		assertTrue(! tmp.isEmpty());
		tmp = mt2.isMatchedBy(t2, tmp);
		assertTrue(! tmp.isEmpty());
	}
	
}