Newer
Older
RDLProofSystem / src / test / java / terms / meta / MetaDynamicDependencyTest.java
@Sakoda2269 Sakoda2269 6 hours ago 2 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.Dependency;
import models.terms.RDLTerm;
import models.terms.Resource;
import models.terms.meta.MatchConstraint;
import models.terms.meta.MetaDependency;
import models.terms.meta.MetaDynamicDependency;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;
import models.terms.meta.MetaTermGenerator;
import utils.Utils;

public class MetaDynamicDependencyTest {

	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("d", Utils.INT, 1);
	Resource f = new Resource("d", Utils.INT, 1);
	Resource g = new Resource("d", Utils.INT, 1);
	
	@Test
	void DynamicDependencyMatchTest() {
		MetaDynamicDependency md1 = new MetaDynamicDependency((ci, cd, mi, md, context) -> new MetaResource(new Variable("x" + ci)));
		Dependency d1 = new Dependency(a, b, c, d);
		assertFalse(md1.isMatchedBy(d1).isEmpty());
		
		Dependency d2 = new Dependency(new Dependency(a, b), c);
		Dependency d3 = new Dependency(d2, d, e);
		MetaDynamicDependency md2 = new MetaDynamicDependency(new MetaTermGenerator() {
			@Override
			public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<Variable, Object> context) {
				if (curDepth != maxDepth && curIndex == 0) {
					return new MetaDynamicDependency(this);
				}
				return new MetaResource(new Variable("x" + curDepth + "_" + curIndex));
			}
		});
		assertFalse(md2.isMatchedBy(d2).isEmpty());
		assertFalse(md2.isMatchedBy(d3).isEmpty());
		
		MetaResource x = new MetaResource(new Variable("x"));
		MetaResource y = new MetaResource(new Variable("y"));
		Dependency d4 = new Dependency(a, b);
		MetaDynamicDependency md3 = new MetaDynamicDependency((ci, cd, mi, md, context) -> new MetaResource(new Variable("x" + ci)), x, y);
		Set<MatchConstraint> constraint = new MetaDependency(x, y).isMatchedBy(d4);
		Dependency d5 = new Dependency(a, b, c);
		constraint = md3.isMatchedBy(d5, constraint);
		assertFalse(constraint.isEmpty());
		Map<Variable, RDLTerm> binding = new HashMap<>();
		binding.put(new Variable("x"), a);
		binding.put(new Variable("y"), b);
		binding.put(new Variable("x2"), c);
		assertEquals(constraint.iterator().next().getBinding(), binding);
	}
	
}