use of at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph in project Alpha by alpha-asp.
the class StratificationAlgorithmTest method stratifyTwoRulesTest.
@Test
public void stratifyTwoRulesTest() {
StringBuilder bld = new StringBuilder();
bld.append("b :- a.").append("\n");
bld.append("c :- b.").append("\n");
ASPCore2Program prog = parser.parse(bld.toString());
NormalProgram normalProg = normalizeTransform.apply(prog);
AnalyzedProgram analyzed = AnalyzedProgram.analyzeNormalProgram(normalProg);
DependencyGraph dg = analyzed.getDependencyGraph();
ComponentGraph cg = ComponentGraphImpl.buildComponentGraph(dg, StronglyConnectedComponentsAlgorithm.findStronglyConnectedComponents(dg));
List<SCComponent> strata = StratificationAlgorithm.calculateStratification(cg);
Predicate a = Predicates.getPredicate("a", 0);
Predicate b = Predicates.getPredicate("b", 0);
Predicate c = Predicates.getPredicate("c", 0);
assertEquals(3, strata.size());
assertTrue(predicateIsBeforePredicateInOrder(a, b, strata));
assertTrue(predicateIsBeforePredicateInOrder(b, c, strata));
assertTrue(predicateIsBeforePredicateInOrder(a, c, strata));
}
use of at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph in project Alpha by alpha-asp.
the class StratificationAlgorithmTest method avoidDuplicatesTest1.
@Test
public void avoidDuplicatesTest1() {
StringBuilder bld = new StringBuilder();
bld.append("b :- a.");
bld.append("c :- b.");
bld.append("c :- a.");
ASPCore2Program prog = parser.parse(bld.toString());
NormalProgram normalProg = normalizeTransform.apply(prog);
AnalyzedProgram analyzed = AnalyzedProgram.analyzeNormalProgram(normalProg);
DependencyGraph dg = analyzed.getDependencyGraph();
ComponentGraph cg = ComponentGraphImpl.buildComponentGraph(dg, StronglyConnectedComponentsAlgorithm.findStronglyConnectedComponents(dg));
List<SCComponent> strata = StratificationAlgorithm.calculateStratification(cg);
Predicate a = Predicates.getPredicate("a", 0);
Predicate b = Predicates.getPredicate("b", 0);
Predicate c = Predicates.getPredicate("c", 0);
assertTrue(predicateIsBeforePredicateInOrder(a, b, strata));
assertTrue(predicateIsBeforePredicateInOrder(b, c, strata));
assertTrue(predicateIsBeforePredicateInOrder(a, c, strata));
assertEquals(3, strata.size());
}
use of at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph in project Alpha by alpha-asp.
the class StratificationAlgorithmTest method stratifyOneRuleTest.
@Test
public void stratifyOneRuleTest() {
ASPCore2Program prog = parser.parse("a :- b.");
NormalProgram normalProg = normalizeTransform.apply(prog);
AnalyzedProgram analyzed = AnalyzedProgram.analyzeNormalProgram(normalProg);
DependencyGraph dg = analyzed.getDependencyGraph();
ComponentGraph cg = ComponentGraphImpl.buildComponentGraph(dg, StronglyConnectedComponentsAlgorithm.findStronglyConnectedComponents(dg));
List<SCComponent> strata = StratificationAlgorithm.calculateStratification(cg);
Predicate a = Predicates.getPredicate("a", 0);
Predicate b = Predicates.getPredicate("b", 0);
assertEquals(2, strata.size());
assertTrue(predicateIsBeforePredicateInOrder(b, a, strata));
}
use of at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph in project Alpha by alpha-asp.
the class DependencyGraphImplTest method reachabilityWithCyclesTest.
@Test
public void reachabilityWithCyclesTest() {
StringBuilder bld = new StringBuilder();
bld.append("b :- a, f1.").append("\n");
bld.append("c :- b.").append("\n");
bld.append("d :- c.").append("\n");
bld.append("a :- d.").append("\n");
bld.append("x :- d, f1.");
ASPCore2Program prog = parser.parse(bld.toString());
NormalProgram normalProg = normalizeTransform.apply(prog);
AnalyzedProgram analyzed = AnalyzedProgram.analyzeNormalProgram(normalProg);
DependencyGraph dg = analyzed.getDependencyGraph();
Node a = dg.getNodeForPredicate(Predicates.getPredicate("a", 0));
Node b = dg.getNodeForPredicate(Predicates.getPredicate("b", 0));
Node c = dg.getNodeForPredicate(Predicates.getPredicate("c", 0));
Node d = dg.getNodeForPredicate(Predicates.getPredicate("d", 0));
Node f1 = dg.getNodeForPredicate(Predicates.getPredicate("f1", 0));
Node x = dg.getNodeForPredicate(Predicates.getPredicate("x", 0));
Node notInGraph = new NodeImpl(Predicates.getPredicate("notInGraph", 0));
assertTrue(DependencyGraphUtils.isReachableFrom(d, a, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(c, a, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(b, a, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(a, a, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(d, b, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(c, b, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(b, b, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(d, c, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(c, c, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(a, d, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(a, c, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(a, b, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(x, f1, dg));
assertTrue(DependencyGraphUtils.isReachableFrom(c, f1, dg));
assertFalse(DependencyGraphUtils.isReachableFrom(notInGraph, a, dg));
}
use of at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph in project Alpha by alpha-asp.
the class DependencyGraphImplTest method stronglyConnectedComponentsSimpleTest.
@Test
public void stronglyConnectedComponentsSimpleTest() {
StringBuilder bld = new StringBuilder();
bld.append("b :- a.").append("\n");
bld.append("a :- b.").append("\n");
ASPCore2Program prog = parser.parse(bld.toString());
NormalProgram normalProg = normalizeTransform.apply(prog);
AnalyzedProgram analyzed = AnalyzedProgram.analyzeNormalProgram(normalProg);
DependencyGraph dg = analyzed.getDependencyGraph();
Node a = dg.getNodeForPredicate(Predicates.getPredicate("a", 0));
Node b = dg.getNodeForPredicate(Predicates.getPredicate("b", 0));
List<Node> componentA = new ArrayList<>();
componentA.add(a);
assertTrue(DependencyGraphUtils.areStronglyConnected(componentA, dg));
assertFalse(DependencyGraphUtils.isStronglyConnectedComponent(componentA, dg));
List<Node> componentB = new ArrayList<>();
componentB.add(b);
assertTrue(DependencyGraphUtils.areStronglyConnected(componentB, dg));
assertFalse(DependencyGraphUtils.isStronglyConnectedComponent(componentB, dg));
List<Node> componentAll = new ArrayList<>();
componentAll.add(a);
componentAll.add(b);
assertTrue(DependencyGraphUtils.areStronglyConnected(componentAll, dg));
assertTrue(DependencyGraphUtils.isStronglyConnectedComponent(componentAll, dg));
}
Aggregations