package com.tinkerpop.blueprints.impls.orient;
import java.io.FileInputStream;
import com.orientechnologies.orient.core.config.OGlobalConfiguration;
import com.tinkerpop.blueprints.*;
import com.tinkerpop.blueprints.impls.GraphTest;
import com.tinkerpop.blueprints.util.io.graphml.GraphMLReader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@RunWith(JUnit4.class)
public class OrientBenchmarkTestSuite extends TestSuite {
private static final int TOTAL_RUNS = 1;
public OrientBenchmarkTestSuite() {
}
public OrientBenchmarkTestSuite(final GraphTest graphTest) {
super(graphTest);
}
@Test
public void testOrientGraph() throws Exception {
double totalTime = 0.0d;
if (graphTest == null)
return;
Graph graph = graphTest.generateGraph();
// graph = new OrientBatchGraph((ODatabaseDocumentTx) ((OrientGraph) graph).getRawGraph());
// GraphMLReader.inputGraph(graph, GraphMLReader.class.getResourceAsStream("graph-example-2.xml"));
GraphMLReader.inputGraph(graph, new FileInputStream("/Users/luca/Downloads/graph-example-2.xml"));
System.out.println("V: " + ((OrientBaseGraph) graph).getRawGraph().countClass("V") + " E: "
+ ((OrientBaseGraph) graph).getRawGraph().countClass("E"));
graph.shutdown();
for (int i = 0; i < TOTAL_RUNS; i++) {
graph = graphTest.generateGraph();
int counter = execute(graph);
double currentTime = this.stopWatch();
totalTime = totalTime + currentTime;
BaseTest.printPerformance(graph.toString(), counter, "OrientGraph elements touched", currentTime);
graph.shutdown();
}
BaseTest.printPerformance("OrientGraph", 1, "OrientGraph experiment average", totalTime / (double) TOTAL_RUNS);
}
private int execute(Graph graph) {
this.stopWatch();
int counter = 0;
for (final Vertex vertex : graph.getVertices()) {
counter++;
for (final Edge edge : vertex.getEdges(Direction.OUT)) {
counter++;
final Vertex vertex2 = edge.getVertex(Direction.IN);
counter++;
for (final Edge edge2 : vertex2.getEdges(Direction.OUT)) {
counter++;
final Vertex vertex3 = edge2.getVertex(Direction.IN);
counter++;
for (final Edge edge3 : vertex3.getEdges(Direction.OUT)) {
counter++;
edge3.getVertex(Direction.OUT);
counter++;
}
}
}
}
return counter;
}
}