All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tinkerpop.blueprints.VertexQueryTestSuite Maven / Gradle / Ivy

The newest version!
package com.tinkerpop.blueprints;

import com.tinkerpop.blueprints.impls.GraphTest;

import java.util.Arrays;
import java.util.List;

import static com.tinkerpop.blueprints.Direction.*;

/**
 * @author Marko A. Rodriguez (http://markorodriguez.com)
 */
public class VertexQueryTestSuite extends TestSuite {

    Vertex a;
    Vertex b;
    Vertex c;
    Edge aFriendB;
    Edge aFriendC;
    Edge aHateC;
    Edge cHateA;
    Edge cHateB;

    public VertexQueryTestSuite() {
    }

    public VertexQueryTestSuite(final GraphTest graphTest) {
        super(graphTest);
    }

    private void createGraph(final Graph graph) {
        a = graph.addVertex(null);
        b = graph.addVertex(null);
        c = graph.addVertex(null);
        aFriendB = graph.addEdge(null, a, b, graphTest.convertLabel("friend"));
        aFriendC = graph.addEdge(null, a, c, graphTest.convertLabel("friend"));
        aHateC = graph.addEdge(null, a, c, graphTest.convertLabel("hate"));
        cHateA = graph.addEdge(null, c, a, graphTest.convertLabel("hate"));
        cHateB = graph.addEdge(null, c, b, graphTest.convertLabel("hate"));
        aFriendB.setProperty("amount", 1.0);
        aFriendB.setProperty("date", 10);
        aFriendC.setProperty("amount", 0.5);
        aHateC.setProperty("amount", 1.0);
        cHateA.setProperty("amount", 1.0);
        cHateB.setProperty("amount", 0.4);
    }

    public void testBasicVertexQuery() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            assertEquals(count(a.query().labels(graphTest.convertLabel("friend")).hasNot("date").edges()), 1);
            assertEquals(a.query().labels(graphTest.convertLabel("friend")).hasNot("date").edges().iterator().next().getProperty("amount"), 0.5);
        }
        graph.shutdown();
    }

    public void testDirectionVertexQuery() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            List results = asList(a.query().direction(OUT).edges());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));
            results = asList(a.query().direction(OUT).vertices());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(b));
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).count(), 3);
        }
        graph.shutdown();
    }

    public void testVertexQueryLabels() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            List results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("hate"), graphTest.convertLabel("friend")).edges());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("hate"), graphTest.convertLabel("friend")).vertices());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(b));
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("hate"), graphTest.convertLabel("friend")).count(), 3);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).edges());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).vertices());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(b));
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).count(), 2);

            results = asList(a.query().direction(BOTH).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).edges());
            assertEquals(results.size(), 4);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));
            assertTrue(results.contains(cHateA));
            results = asList(a.query().direction(BOTH).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).vertices());
            assertEquals(results.size(), 4);
            assertTrue(results.contains(b));
            assertTrue(results.contains(c));
            assertFalse(results.contains(a));
            assertEquals(a.query().direction(BOTH).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).count(), 4);

        }
        graph.shutdown();
    }

    public void testHasVertexQuery() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            List results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", 1.0).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendB));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", 1.0).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(b));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", 1.0).count(), 1);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.NOT_EQUAL, 1.0).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.NOT_EQUAL, 1.0).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.NOT_EQUAL, 1.0).count(), 1);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.LESS_THAN_EQUAL, 1.0).edges());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.LESS_THAN_EQUAL, 1.0).vertices());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(b));
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", Compare.LESS_THAN_EQUAL, 1.0).count(), 2);

            results = asList(a.query().direction(OUT).has("amount", Compare.LESS_THAN, 1.0).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendC));
            results = asList(a.query().direction(OUT).has("amount", Compare.LESS_THAN, 1.0).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(OUT).has("amount", Compare.LESS_THAN, 1.0).count(), 1);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", 0.5).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).has("amount", 0.5).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(c));

            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate"), graphTest.convertLabel("friend")).has("amount", Compare.GREATER_THAN, 0.5).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(cHateA));
            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate"), graphTest.convertLabel("friend")).has("amount", Compare.GREATER_THAN, 0.5).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(IN).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN, 0.5).count(), 1);

            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN, 1.0).edges());
            assertEquals(results.size(), 0);
            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN, 1.0).vertices());
            assertEquals(results.size(), 0);
            assertEquals(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN, 1.0).count(), 0);

            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN_EQUAL, 1.0).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(cHateA));
            results = asList(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN_EQUAL, 1.0).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(c));
            assertEquals(a.query().direction(IN).labels(graphTest.convertLabel("hate")).has("amount", Compare.GREATER_THAN_EQUAL, 1.0).count(), 1);

            results = asList(a.query().direction(OUT).has("amount").edges());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));

            results = asList(a.query().direction(OUT).hasNot("amount").vertices());
            assertEquals(results.size(), 0);
            results = asList(a.query().direction(OUT).hasNot("date").edges());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));
            results = asList(a.query().direction(OUT).hasNot("date").vertices());
            assertEquals(results.size(), 2);
            assertEquals(results.get(0), c);
            assertEquals(results.get(0), c);

            results = asList(a.query().direction(OUT).has("amount", Contains.NOT_IN, Arrays.asList(2.3, 5.6, 234)).edges());
            assertEquals(results.size(), 3);
            assertTrue(results.contains(aFriendB));
            assertTrue(results.contains(aFriendC));
            assertTrue(results.contains(aHateC));
        }
        graph.shutdown();
    }

    public void testContainsQueries() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);

            // EQUALS

            List result = asList(a.query().direction(OUT).has("amount", 1.0).edges());
            assertEquals(result.size(), 2);
            assertTrue(result.contains(aFriendB));
            assertTrue(result.contains(aHateC));

            result = asList(a.query().direction(OUT).has("amount", Contains.IN, Arrays.asList(1.0, 0.5)).edges());
            assertEquals(result.size(), 3);
            assertTrue(result.contains(aFriendB));
            assertTrue(result.contains(aFriendC));
            assertTrue(result.contains(aHateC));

            result = asList(a.query().direction(OUT).has("amount", Contains.IN, Arrays.asList(1.0, 0.5, "marko", 13, 'a', 32.13d)).edges());
            assertEquals(result.size(), 3);
            assertTrue(result.contains(aFriendB));
            assertTrue(result.contains(aFriendC));
            assertTrue(result.contains(aHateC));

            result = asList(a.query().direction(OUT).has("amount", Contains.IN, Arrays.asList(1.0, 0.5, "marko", 13, 'a', 32.13d)).vertices());
            assertEquals(result.size(), 3);
            assertTrue(result.contains(b));
            assertTrue(result.contains(c));
        }
        graph.shutdown();
    }

    public void testIntervalVertexQuery() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            List results = asList(a.query().direction(OUT).interval("date", 5, 10).edges());
            assertEquals(results.size(), 0);
            results = asList(a.query().direction(OUT).interval("date", 5, 10).vertices());
            assertEquals(results.size(), 0);
            assertEquals(a.query().direction(OUT).interval("date", 5, 10).count(), 0);

            results = asList(a.query().direction(OUT).interval("date", 5, 11).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendB));
            results = asList(a.query().direction(OUT).interval("date", 5, 11).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(b));
            assertEquals(a.query().direction(OUT).interval("date", 5, 11).count(), 1);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).interval("date", 5, 11).edges());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(aFriendB));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).interval("date", 5, 11).vertices());
            assertEquals(results.size(), 1);
            assertTrue(results.contains(b));
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).interval("date", 5, 11).count(), 1);
        }
        graph.shutdown();
    }

    public void testLimitVertexQuery() {
        Graph graph = graphTest.generateGraph();
        if (graph.getFeatures().supportsEdgeProperties) {
            createGraph(graph);
            List results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).limit(2).edges());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(aFriendB) || results.contains(aHateC) || results.contains(aFriendC));
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).limit(2).vertices());
            assertEquals(results.size(), 2);
            assertTrue(results.contains(b) || results.contains(c));
            assertFalse(results.contains(a));
            assertEquals(a.query().labels(graphTest.convertLabel("friend"), graphTest.convertLabel("hate")).limit(2).count(), 2);

            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).limit(0).edges());
            assertEquals(results.size(), 0);
            results = asList(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).limit(0).vertices());
            assertEquals(results.size(), 0);
            assertEquals(a.query().direction(OUT).labels(graphTest.convertLabel("friend")).limit(0).count(), 0);
        }
        graph.shutdown();

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy