Search in sources :

Example 1 with DependencyGraph

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));
}
Also used : ComponentGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph) ASPCore2Program(at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program) SCComponent(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph.SCComponent) AnalyzedProgram(at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram) NormalProgram(at.ac.tuwien.kr.alpha.api.programs.NormalProgram) DependencyGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph) Predicate(at.ac.tuwien.kr.alpha.api.programs.Predicate) Test(org.junit.jupiter.api.Test)

Example 2 with DependencyGraph

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());
}
Also used : ComponentGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph) ASPCore2Program(at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program) SCComponent(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph.SCComponent) AnalyzedProgram(at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram) NormalProgram(at.ac.tuwien.kr.alpha.api.programs.NormalProgram) DependencyGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph) Predicate(at.ac.tuwien.kr.alpha.api.programs.Predicate) Test(org.junit.jupiter.api.Test)

Example 3 with DependencyGraph

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));
}
Also used : ComponentGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph) ASPCore2Program(at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program) SCComponent(at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph.SCComponent) AnalyzedProgram(at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram) NormalProgram(at.ac.tuwien.kr.alpha.api.programs.NormalProgram) DependencyGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph) Predicate(at.ac.tuwien.kr.alpha.api.programs.Predicate) Test(org.junit.jupiter.api.Test)

Example 4 with DependencyGraph

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));
}
Also used : ASPCore2Program(at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program) AnalyzedProgram(at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram) Node(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph.Node) NormalProgram(at.ac.tuwien.kr.alpha.api.programs.NormalProgram) DependencyGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph) Test(org.junit.jupiter.api.Test)

Example 5 with DependencyGraph

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));
}
Also used : ASPCore2Program(at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program) AnalyzedProgram(at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram) Node(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph.Node) ArrayList(java.util.ArrayList) NormalProgram(at.ac.tuwien.kr.alpha.api.programs.NormalProgram) DependencyGraph(at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph) Test(org.junit.jupiter.api.Test)

Aggregations

DependencyGraph (at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph)14 NormalProgram (at.ac.tuwien.kr.alpha.api.programs.NormalProgram)13 AnalyzedProgram (at.ac.tuwien.kr.alpha.core.programs.AnalyzedProgram)13 Test (org.junit.jupiter.api.Test)13 ASPCore2Program (at.ac.tuwien.kr.alpha.api.programs.ASPCore2Program)12 ComponentGraph (at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph)8 Predicate (at.ac.tuwien.kr.alpha.api.programs.Predicate)7 SCComponent (at.ac.tuwien.kr.alpha.api.programs.analysis.ComponentGraph.SCComponent)7 Node (at.ac.tuwien.kr.alpha.api.programs.analysis.DependencyGraph.Node)5 DebugSolvingContext (at.ac.tuwien.kr.alpha.api.DebugSolvingContext)2 ArrayList (java.util.ArrayList)2 Alpha (at.ac.tuwien.kr.alpha.api.Alpha)1 Solver (at.ac.tuwien.kr.alpha.api.Solver)1 AlphaImpl (at.ac.tuwien.kr.alpha.api.impl.AlphaImpl)1 StratifiedEvaluation (at.ac.tuwien.kr.alpha.core.programs.transformation.StratifiedEvaluation)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 List (java.util.List)1