Newer
Older
RDLProofSystem / src / test / java / terms / meta / MetaDynamicTermTest.java
@Sakoda2269 Sakoda2269 26 days ago 2 KB MetaDynamicTerm追加
package terms.meta;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

import models.algebra.Variable;
import models.terms.Dependency;
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.MetaTermGenerator;
import utils.Utils;

public class MetaDynamicTermTest {

	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);
	
	@Test
	void GenerateTest1() {
		MetaDynamicTerm mt1 = new MetaDynamicTerm(
				new MetaTermGenerator() {
					@Override
					public MetaRDLTerm generate(int index, int depth, boolean isLast) {
						if (isLast) {
							return new MetaResource(new Variable("x"));
						}
						return new MetaDynamicTerm(this, new MetaResource(new Variable("y" + depth)));
					}
				}, 
				new MetaResource(new Variable("y"))
		);
		Dependency d1 = new Dependency(a, b);
		Dependency d2 = new Dependency(d1, c);
		Dependency d3 = new Dependency(d2, d);
		assertTrue(! mt1.isMatchedBy(d1).isEmpty());
		assertTrue(! mt1.isMatchedBy(d2).isEmpty());
		assertTrue(! mt1.isMatchedBy(d3).isEmpty());
		
		MatchConstraint result = mt1.isMatchedBy(d3).iterator().next();
		MetaRDLTerm mt2 = mt1.dependencyGenerate(result.getBinding());
		assertTrue(mt2.isMatchedBy(d3, result).contains(result));
		
		assertEquals(mt1.substitute(result.getBinding()), d3);
	}

	@Test
	void GenerateTest2() {
		MetaDynamicTerm mt1 = new MetaDynamicTerm(
				new MetaResource(new Variable("x")),
				(MetaTermGenerator) (i, d, l) -> new MetaResource(new Variable("y" + i))
		);
		Dependency d1 = new Dependency(a, b);
		Dependency d2 = new Dependency(a, b, c);
		Dependency d3 = new Dependency(a, b, c, d);
		
		assertTrue(! mt1.isMatchedBy(d1).isEmpty());
		assertTrue(! mt1.isMatchedBy(d2).isEmpty());
		assertTrue(! mt1.isMatchedBy(d3).isEmpty());
	}
	
	@Test
	void GenerateTest3() {
		MetaDynamicTerm mt1 = new MetaDynamicTerm(
				new MetaTermGenerator() {
					@Override
					public MetaRDLTerm generate(int index, int depth, boolean isLast) {
						if (isLast) {
							return new MetaResource(new Variable("x"));
						}
						return new MetaDynamicTerm(this, (MetaTermGenerator) (i, d, l) -> new MetaResource(new Variable("y" + (d+1) + "," + i)));
					}
				}, 
				(MetaTermGenerator) (i, d, l) -> new MetaResource(new Variable("y0," + i))
		);
		Dependency d1 = new Dependency(a, b, c, d);
		Dependency d2 = new Dependency(d1, c, d);
		assertTrue(! mt1.isMatchedBy(d1).isEmpty());
		assertTrue(! mt1.isMatchedBy(d2).isEmpty());
		
		MatchConstraint result = mt1.isMatchedBy(d2).iterator().next();
		MetaRDLTerm mt2 = mt1.dependencyGenerate(result.getBinding());
		assertTrue(mt2.isMatchedBy(d2, result).contains(result));
		
		assertEquals(mt1.substitute(result.getBinding()), d2);
	}


}