class PerfExample2 extends PerfExampleBase {

    public static void main(String[] args) throws Exception {
        PerfExample2 tester = new PerfExample2();
        tester.test(args);

        // Stop daemon thread
        HugeFactory.shutdown(30L);
    }

    @Override
    protected void initSchema(SchemaManager schema) {
        schema.propertyKey("name").asText().ifNotExist().create();

        schema.vertexLabel("person")
              .useAutomaticId()
              .ifNotExist()
              .create();

        schema.vertexLabel("software")
              .useAutomaticId()
              .ifNotExist()
              .create();

        schema.edgeLabel("knows")
              .sourceLabel("person")
              .targetLabel("person")
              .ifNotExist()
              .create();

        schema.edgeLabel("created")
              .sourceLabel("person")
              .targetLabel("software")
              .ifNotExist()
              .create();
    }

    @Override
    protected void testInsert(GraphManager graph, int times, int multiple) {<FILL_FUNCTION_BODY>}
}

        List<Object> personIds = new ArrayList<>(PERSON_NUM * multiple);
        List<Object> softwareIds = new ArrayList<>(SOFTWARE_NUM * multiple);

        for (int time = 0; time < times; time++) {
            LOG.debug("============== random person vertex ===============");
            for (int i = 0; i < PERSON_NUM * multiple; i++) {
                Vertex vertex = graph.addVertex(T.label, "person");
                personIds.add(vertex.id());
                LOG.debug("Add person: {}", vertex);
            }

            LOG.debug("============== random software vertex ============");
            for (int i = 0; i < SOFTWARE_NUM * multiple; i++) {
                Vertex vertex = graph.addVertex(T.label, "software");
                softwareIds.add(vertex.id());
                LOG.debug("Add software: {}", vertex);
            }

            LOG.debug("========== random knows & created edges ==========");
            for (int i = 0; i < EDGE_NUM / 2 * multiple; i++) {
                Random random = new Random();

                // Add edge: person --knows-> person
                Object p1 = personIds.get(random.nextInt(PERSON_NUM));
                Object p2 = personIds.get(random.nextInt(PERSON_NUM));
                graph.getVertex(p1).addEdge("knows", graph.getVertex(p2));

                // Add edge: person --created-> software
                Object p3 = personIds.get(random.nextInt(PERSON_NUM));
                Object s1 = softwareIds.get(random.nextInt(SOFTWARE_NUM));
                graph.getVertex(p3).addEdge("created", graph.getVertex(s1));
            }

            try {
                graph.tx().commit();
            } catch (BackendException e) {
                if (e.getCause() instanceof NoHostAvailableException) {
                    LOG.warn("Failed to commit tx: {}", e.getMessage());
                } else {
                    throw e;
                }
            }

            this.vertices.addAll(personIds);
            this.vertices.addAll(softwareIds);

            personIds.clear();
            softwareIds.clear();
        }
    
<methods>public non-sealed void <init>() ,public int test(java.lang.String[]) throws java.lang.Exception,public void testInsertPerf(org.apache.hugegraph.example.PerfExampleBase.GraphManager, int, int, int) throws java.lang.Exception,public void testQueryEdgePerf(org.apache.hugegraph.example.PerfExampleBase.GraphManager, int, int, int) throws java.lang.Exception,public void testQueryVertexPerf(org.apache.hugegraph.example.PerfExampleBase.GraphManager, int, int, int) throws java.lang.Exception<variables>public static final int EDGE_NUM,protected static final Logger LOG,public static final int PERSON_NUM,public static final int SOFTWARE_NUM,protected boolean profile,protected Set<java.lang.Object> vertices