Search in sources :

Example 21 with Path

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

the class TestAllSimplePaths method testCircularGraph.

@Test
void testCircularGraph() {
    /* Layout
         *
         * (a)---(b)===(c)---(e)
         *         \   /
         *          (d)
         */
    try (Transaction transaction = graphDb.beginTx()) {
        graph.makeEdge(transaction, "a", "b");
        graph.makeEdge(transaction, "b", "c");
        graph.makeEdge(transaction, "b", "c");
        graph.makeEdge(transaction, "b", "d");
        graph.makeEdge(transaction, "c", "d");
        graph.makeEdge(transaction, "c", "e");
        PathFinder<Path> finder = instantiatePathFinder(new BasicEvaluationContext(transaction, graphDb), 10);
        Iterable<Path> paths = finder.findAllPaths(graph.getNode(transaction, "a"), graph.getNode(transaction, "e"));
        assertPaths(paths, "a,b,c,e", "a,b,c,e", "a,b,d,c,e");
        transaction.commit();
    }
}
Also used : Path(org.neo4j.graphdb.Path) BasicEvaluationContext(org.neo4j.graphalgo.BasicEvaluationContext) Transaction(org.neo4j.graphdb.Transaction) Test(org.junit.jupiter.api.Test)

Example 22 with Path

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

the class TestBidirectionalTraversal method mirroredTraversalReversesInitialState.

@Test
void mirroredTraversalReversesInitialState() {
    /*
         * (a)-->(b)-->(c)-->(d)
         */
    createGraph("a TO b", "b TO c", "c TO d");
    try (Transaction transaction = getGraphDb().beginTx()) {
        BranchCollisionPolicy collisionPolicy = (evaluator, pathPredicate) -> new StandardBranchCollisionDetector(null, null) {

            @Override
            protected boolean includePath(Path path, TraversalBranch startPath, TraversalBranch endPath) {
                assertEquals(0, startPath.state());
                assertEquals(10, endPath.state());
                return true;
            }
        };
        Iterables.count(transaction.bidirectionalTraversalDescription().mirroredSides(transaction.traversalDescription().uniqueness(NODE_PATH).expand(PathExpanders.forType(to), new InitialBranchState.State<>(0, 10))).collisionPolicy(collisionPolicy).traverse(getNodeWithName(transaction, "a"), getNodeWithName(transaction, "d")));
    }
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) BranchCollisionPolicy(org.neo4j.graphdb.traversal.BranchCollisionPolicy) Traverser(org.neo4j.graphdb.traversal.Traverser) OUTGOING(org.neo4j.graphdb.Direction.OUTGOING) Iterators.count(org.neo4j.internal.helpers.collection.Iterators.count) PathExpanders(org.neo4j.graphdb.PathExpanders) Node(org.neo4j.graphdb.Node) TraversalBranch(org.neo4j.graphdb.traversal.TraversalBranch) PathExpanderBuilder(org.neo4j.graphdb.PathExpanderBuilder) PathExpander(org.neo4j.graphdb.PathExpander) SideSelectorPolicies(org.neo4j.graphdb.traversal.SideSelectorPolicies) Evaluators.includeIfContainsAll(org.neo4j.graphdb.traversal.Evaluators.includeIfContainsAll) Iterables(org.neo4j.internal.helpers.collection.Iterables) Arrays.asList(java.util.Arrays.asList) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Transaction(org.neo4j.graphdb.Transaction) NODE_PATH(org.neo4j.graphdb.traversal.Uniqueness.NODE_PATH) StandardBranchCollisionDetector(org.neo4j.graphdb.impl.traversal.StandardBranchCollisionDetector) RelationshipType.withName(org.neo4j.graphdb.RelationshipType.withName) BidirectionalTraversalDescription(org.neo4j.graphdb.traversal.BidirectionalTraversalDescription) RELATIONSHIP_PATH(org.neo4j.graphdb.traversal.Uniqueness.RELATIONSHIP_PATH) Uniqueness(org.neo4j.graphdb.traversal.Uniqueness) Test(org.junit.jupiter.api.Test) Path(org.neo4j.graphdb.Path) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) TraversalDescription(org.neo4j.graphdb.traversal.TraversalDescription) Relationship(org.neo4j.graphdb.Relationship) Evaluators(org.neo4j.graphdb.traversal.Evaluators) RelationshipType(org.neo4j.graphdb.RelationshipType) Path(org.neo4j.graphdb.Path) BranchCollisionPolicy(org.neo4j.graphdb.traversal.BranchCollisionPolicy) InitialBranchState(org.neo4j.graphdb.traversal.InitialBranchState) Transaction(org.neo4j.graphdb.Transaction) StandardBranchCollisionDetector(org.neo4j.graphdb.impl.traversal.StandardBranchCollisionDetector) TraversalBranch(org.neo4j.graphdb.traversal.TraversalBranch) Test(org.junit.jupiter.api.Test)

Example 23 with Path

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

the class Neo4jAlgoTestCase method assertPaths.

private static void assertPaths(Iterable<? extends Path> paths, List<String> pathDefs) {
    List<String> unexpectedDefs = new ArrayList<>();
    try (ResourceIterator<? extends Path> iterator = Iterators.asResourceIterator(paths.iterator())) {
        while (iterator.hasNext()) {
            Path path = iterator.next();
            String pathDef = getPathDef(path);
            int index = pathDefs.indexOf(pathDef);
            if (index != -1) {
                pathDefs.remove(index);
            } else {
                unexpectedDefs.add(getPathDef(path));
            }
        }
    }
    assertTrue(unexpectedDefs.isEmpty(), "These unexpected paths were found: " + unexpectedDefs + ". In addition these expected paths weren't found:" + pathDefs);
    assertTrue(pathDefs.isEmpty(), "These were expected, but not found: " + pathDefs);
}
Also used : Path(org.neo4j.graphdb.Path) ArrayList(java.util.ArrayList)

Example 24 with Path

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

the class TestTopFetchingWeightedPathIterator method shouldHandleMultipleShortest.

@Test
void shouldHandleMultipleShortest() {
    try (Transaction transaction = graphDb.beginTx()) {
        Path a = graph.makePathWithRelProperty(transaction, length, "a1-1-a2");
        Path b = graph.makePathWithRelProperty(transaction, length, "b1-0-b2-1-b3-0-b4");
        List<Path> list = new ArrayList<>();
        list.add(a);
        list.add(b);
        topFetcher = new TopFetchingWeightedPathIterator(list.iterator(), evaluator, DEFAULT_EPSILON);
        List<Path> result = new ArrayList<>();
        while (topFetcher.hasNext()) {
            result.add(topFetcher.next());
        }
        assertPathsWithPaths(result, a, b);
        transaction.commit();
    }
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) ArrayList(java.util.ArrayList) Test(org.junit.jupiter.api.Test)

Example 25 with Path

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

the class TestPath method reverseNodes.

@Test
void reverseNodes() {
    try (Transaction transaction = getGraphDb().beginTx()) {
        a = transaction.getNodeById(a.getId());
        Traverser traverse = transaction.traversalDescription().evaluator(atDepth(0)).traverse(a);
        Path path = getFirstPath(traverse);
        assertContains(path.reverseNodes(), a);
        Traverser traverse2 = transaction.traversalDescription().evaluator(atDepth(4)).traverse(a);
        Path path2 = getFirstPath(traverse2);
        assertContainsInOrder(path2.reverseNodes(), e, d, c, b, a);
    }
}
Also used : Path(org.neo4j.graphdb.Path) Transaction(org.neo4j.graphdb.Transaction) Traverser(org.neo4j.graphdb.traversal.Traverser) Test(org.junit.jupiter.api.Test)

Aggregations

Path (org.neo4j.graphdb.Path)170 Node (org.neo4j.graphdb.Node)73 Transaction (org.neo4j.graphdb.Transaction)51 Test (org.junit.jupiter.api.Test)49 Relationship (org.neo4j.graphdb.Relationship)47 Test (org.junit.Test)37 WeightedPath (org.neo4j.graphalgo.WeightedPath)25 Traverser (org.neo4j.graphdb.traversal.Traverser)24 BasicEvaluationContext (org.neo4j.graphalgo.BasicEvaluationContext)21 ArrayList (java.util.ArrayList)19 Map (java.util.Map)18 TraversalDescription (org.neo4j.graphdb.traversal.TraversalDescription)18 HashSet (java.util.HashSet)12 RelationshipType (org.neo4j.graphdb.RelationshipType)10 Entity (org.neo4j.graphdb.Entity)9 Evaluator (org.neo4j.graphdb.traversal.Evaluator)9 HashMap (java.util.HashMap)7 LinkedList (java.util.LinkedList)6 PathFinder (org.neo4j.graphalgo.PathFinder)6 PathExpander (org.neo4j.graphdb.PathExpander)6