@Test
    @Ignore
    public final void test() throws InterruptedException {
        final OutputWithWriter forWriter = new OutputWithWriter();
        Thread writerThread = new Thread(forWriter);
        final OutputWithGenerator forGenerator = new OutputWithGenerator();
        Thread generatorThread = new Thread(forGenerator);
        writerThread.start();
        generatorThread.start();
        writerThread.join();
        generatorThread.join();
        System.out.println("Generator time: " + (forGenerator.end - forGenerator.start));
        System.out.println("Writer time: " + (forWriter.end - forWriter.start));
        System.out.println("Output length from generator: " + forGenerator.metric);
        System.out.println("Output length from writer: " + forWriter.metric);
        System.out.println("Iterations with generator: " + forGenerator.runs);
        System.out.println("Iterations with writer: " + forWriter.runs);
        System.out.println("Iterations/s with generator: " + ((double) forGenerator.runs / (double) (forGenerator.end - forGenerator.start)) * 1000.0d);
        System.out.println("Iterations/s  with writer: " + ((double) forWriter.runs / (double) (forWriter.end - forWriter.start)) * 1000.0d);
    }
Object identity is used to differentiate between different implementation strategies, toString() is used to print a report.

@return an object with a descriptive toString() for the implementation under test
vespajlib/src/test/java/com/yahoo/text/JsonMicroBenchmarkTestCase.java