Newer
Older
RDLProofSystem / src / test / java / terms / DependencyTermTest.java
package terms;

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.MetaDynamicTerm;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;
import models.terms.meta.MetaTermPairGenerator;
import models.terms.meta.MetaTermPairGenerator.TermPair;
import models.terms.meta.OrderVariableConstraint;
import utils.Utils;

public class DependencyTermTest {

	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 EqualsTest() {
		DependencyTerm t1 = new DependencyTerm(a, b, c);
		DependencyTerm t2 = new DependencyTerm(a, b, c);
		assertEquals(t1, t2);
		
		DependencyTerm t3 = new DependencyTerm(a, b, c, b, c);
		assertEquals(t1, t3);
		
		DependencyTerm t4 = new DependencyTerm(a, c, b);
		assertFalse(t1.equals(t4));
		
		DependencyTerm t5 = new DependencyTerm(a, b, c, d, e);
		DependencyTerm t6 = new DependencyTerm(a, d, e, b, c);
		DependencyTerm t7 = new DependencyTerm(a, b, e, d, c);
		assertEquals(t5, t6);
		assertFalse(t5.equals(t7));
		
		DependencyTerm t8 = new DependencyTerm(t1, t5, t6);
		DependencyTerm t9 = new DependencyTerm(t1, t6, t5);
		assertEquals(t8, t9);
		
	}
	
	@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 MetaRDLTerm(x, y, z, w, p);
		MetaRDLTerm mt2 = new MetaRDLTerm(x, w, p, y, z);
		MetaRDLTerm mt3 = new MetaRDLTerm(x, p, w, y, z);
		MetaRDLTerm mt4 = new MetaRDLTerm(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 MetaRDLTerm(x, p, q, v, w);
		MetaRDLTerm mt2 = new MetaRDLTerm(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 MetaRDLTerm(o, p, q, r, s);
		MetaRDLTerm mt2 = new MetaRDLTerm(s, t, u);
		Set<MatchConstraint> tmp = mt1.isMatchedBy(t1);
		assertTrue(! tmp.isEmpty());
		tmp = mt2.isMatchedBy(t2, tmp);
		assertTrue(! tmp.isEmpty());
	}
	
	@Test
	void DynamicMatchTest() {
		Resource a1 = new Resource("a1", Utils.INT, 3);
		Resource a2 = new Resource("a2", Utils.INT, 1);
		Resource a3 = new Resource("a3", Utils.INT, 4);
		Resource a4 = new Resource("a4", Utils.INT, 2);
		Resource a5 = new Resource("a5", Utils.INT, 4);
		DependencyTerm t1 = new DependencyTerm(a1, a2, a3, a4, a5);
		MetaResource x = new MetaResource(new Variable("x"), new Variable("n"));
		MetaDynamicTerm mt1 = new MetaDynamicTerm(x, 
				(MetaTermPairGenerator) (i, depth, isLast) -> 
					new TermPair(
							new MetaResource(new Variable("x" + (2*i + 1)), Utils.parse("n-1-" + i)), 
							new MetaResource(new Variable("x" + (2*i + 2)), Utils.parse("n+1"))
					)
			);
		Set<MatchConstraint> tmp = mt1.isMatchedBy(t1);
		
		assertTrue(! tmp.isEmpty());
	}
	
	@Test
	void DynamicMatchTest2() {
		MetaResource x = new MetaResource(new Variable("x"));
		MetaDynamicTerm mt1 = new MetaDynamicTerm(x, (MetaTermPairGenerator) (i, depth, isLast) -> new TermPair(new MetaResource(new Variable("x" + i)), new MetaResource(new Variable("y"+i))));
		DependencyTerm d1 = new DependencyTerm(a, b, c);
		DependencyTerm d2 = new DependencyTerm(a, b, c, d, e);
		assertTrue(! mt1.isMatchedBy(d1).isEmpty());
		assertTrue(! mt1.isMatchedBy(d2).isEmpty());
	}
	
	@Test
	void OrderTest() {
		Resource text = new Resource("text", Utils.INT, 2);
		Resource wNo = new Resource("wNo", Utils.INT, 2);
		Resource v = new Resource("v", Utils.INT, 1);
		Resource scId = new Resource("scId", Utils.INT, 1);
		Resource curScId = new Resource("curScId", Utils.INT, 0);
		Resource curWNo = new Resource("curWNo", Utils.INT, 1);
		
		DependencyTerm t1 = new DependencyTerm(text, wNo, v);
		DependencyTerm t2 = new DependencyTerm(t1, scId, curScId, v, curWNo);
		assertEquals(t2.getOrder(), 1);
	}
	
}