Search in sources :

Example 96 with Path

use of org.neo4j.graphdb.Path in project neo4j by neo4j.

the class TestBranchState method evaluateState.

@Test
public void evaluateState() throws Exception {
    /*
         * (a)-1->(b)-2->(c)-3->(d)
         *   \           ^
         *    4         6
         *    (e)-5->(f)
         */
    createGraph("a TO b", "b TO c", "c TO d", "a TO e", "e TO f", "f TO c");
    try (Transaction tx = beginTx()) {
        PathEvaluator<Integer> evaluator = new PathEvaluator.Adapter<Integer>() {

            @Override
            public Evaluation evaluate(Path path, BranchState<Integer> state) {
                return ofIncludes(path.endNode().getProperty("name").equals("c") && state.getState() == 3);
            }
        };
        expectPaths(getGraphDb().traversalDescription().uniqueness(Uniqueness.NODE_PATH).expand(new RelationshipWeightExpander(), new InitialBranchState.State<>(1, 1)).evaluator(evaluator).traverse(getNodeWithName("a")), "a,b,c");
        tx.success();
    }
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) BranchState(org.neo4j.graphdb.traversal.BranchState) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) BranchState(org.neo4j.graphdb.traversal.BranchState) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) Test(org.junit.Test)

Example 97 with Path

use of org.neo4j.graphdb.Path in project neo4j by neo4j.

the class TestMultiPruneEvaluators method testMaxDepthAndCustomPruneEvaluatorCombined.

@Test
public void testMaxDepthAndCustomPruneEvaluatorCombined() {
    Evaluator lessThanThreeRels = new Evaluator() {

        public Evaluation evaluate(Path path) {
            return count(path.endNode().getRelationships(Direction.OUTGOING).iterator()) < 3 ? Evaluation.INCLUDE_AND_PRUNE : Evaluation.INCLUDE_AND_CONTINUE;
        }
    };
    TraversalDescription description = getGraphDb().traversalDescription().evaluator(Evaluators.all()).evaluator(toDepth(1)).evaluator(lessThanThreeRels);
    Set<String> expectedNodes = new HashSet<String>(asList("a", "b", "c", "d", "e"));
    try (Transaction tx = beginTx()) {
        for (Path position : description.traverse(node("a"))) {
            String name = (String) position.endNode().getProperty("name");
            assertTrue(name + " shouldn't have been returned", expectedNodes.remove(name));
        }
        tx.success();
    }
    assertTrue(expectedNodes.isEmpty());
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) TraversalDescription(org.neo4j.graphdb.traversal.TraversalDescription) Evaluator(org.neo4j.graphdb.traversal.Evaluator) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 98 with Path

use of org.neo4j.graphdb.Path in project neo4j by neo4j.

the class TestMultiRelTypesAndDirections method testCIsReturnedOnDepthTwo.

private void testCIsReturnedOnDepthTwo(TraversalDescription description) {
    try (Transaction transaction = beginTx()) {
        description = description.expand(PathExpanders.forTypeAndDirection(ONE, OUTGOING));
        int i = 0;
        for (Path position : description.traverse(node("A"))) {
            assertEquals(i++, position.length());
        }
    }
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction)

Example 99 with Path

use of org.neo4j.graphdb.Path in project neo4j by neo4j.

the class TestUniqueness method nodeGlobalUniqueness.

@Test
public void nodeGlobalUniqueness() {
    /*
         * (a)-TO->(b)-TO->(c)
         *   \----TO---->/
         */
    createGraph("a TO b", "a TO c", "b TO c");
    RelationshipType to = withName("TO");
    try (Transaction tx = beginTx()) {
        Node a = getNodeWithName("a");
        Node c = getNodeWithName("c");
        Iterator<Path> path = getGraphDb().traversalDescription().relationships(to, OUTGOING).uniqueness(NODE_GLOBAL).evaluator(includeWhereEndNodeIs(c)).traverse(a).iterator();
        Path thePath = path.next();
        assertFalse(path.hasNext());
        NodePathRepresentation pathRepresentation = new NodePathRepresentation(NAME_PROPERTY_REPRESENTATION);
        assertEquals("a,b,c", pathRepresentation.represent(thePath));
        tx.success();
    }
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) RelationshipType(org.neo4j.graphdb.RelationshipType) Test(org.junit.Test)

Example 100 with Path

use of org.neo4j.graphdb.Path in project neo4j by neo4j.

the class TreeGraphTest method testPostorderDepthFirstReturnsDeeperNodesFirst.

@Test
public void testPostorderDepthFirstReturnsDeeperNodesFirst() {
    Traverser traverser = getGraphDb().traversalDescription().order(POSTORDER_DEPTH_FIRST).traverse(node("1"));
    int i = 0;
    List<String> encounteredNodes = new ArrayList<>();
    try (Transaction tx = beginTx()) {
        for (Path pos : traverser) {
            encounteredNodes.add((String) pos.endNode().getProperty("name"));
            assertEquals(expectedDepth(12 - i++), pos.length());
        }
        tx.success();
    }
    assertEquals(13, i);
    assertTrue(encounteredNodes.indexOf("5") < encounteredNodes.indexOf("2"));
    assertTrue(encounteredNodes.indexOf("6") < encounteredNodes.indexOf("2"));
    assertTrue(encounteredNodes.indexOf("7") < encounteredNodes.indexOf("2"));
    assertTrue(encounteredNodes.indexOf("8") < encounteredNodes.indexOf("3"));
    assertTrue(encounteredNodes.indexOf("9") < encounteredNodes.indexOf("3"));
    assertTrue(encounteredNodes.indexOf("A") < encounteredNodes.indexOf("3"));
    assertTrue(encounteredNodes.indexOf("B") < encounteredNodes.indexOf("4"));
    assertTrue(encounteredNodes.indexOf("C") < encounteredNodes.indexOf("4"));
    assertTrue(encounteredNodes.indexOf("D") < encounteredNodes.indexOf("4"));
    assertTrue(encounteredNodes.indexOf("2") < encounteredNodes.indexOf("1"));
    assertTrue(encounteredNodes.indexOf("3") < encounteredNodes.indexOf("1"));
    assertTrue(encounteredNodes.indexOf("4") < encounteredNodes.indexOf("1"));
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) Traverser(org.neo4j.graphdb.traversal.Traverser) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Aggregations

Path (org.neo4j.graphdb.Path)112 Test (org.junit.Test)66 Node (org.neo4j.graphdb.Node)49 Relationship (org.neo4j.graphdb.Relationship)30 WeightedPath (org.neo4j.graphalgo.WeightedPath)20 Transaction (org.neo4j.graphdb.Transaction)18 ArrayList (java.util.ArrayList)15 Traverser (org.neo4j.graphdb.traversal.Traverser)15 TraversalDescription (org.neo4j.graphdb.traversal.TraversalDescription)12 HashSet (java.util.HashSet)9 Evaluator (org.neo4j.graphdb.traversal.Evaluator)9 LinkedList (java.util.LinkedList)6 RelationshipType (org.neo4j.graphdb.RelationshipType)6 TraversalBranch (org.neo4j.graphdb.traversal.TraversalBranch)6 Predicate (org.neo4j.helpers.Predicate)6 HashMap (java.util.HashMap)5 Map (java.util.Map)5 PathFinder (org.neo4j.graphalgo.PathFinder)4 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)4 ExactDepthPathFinder (org.neo4j.graphalgo.impl.path.ExactDepthPathFinder)3