private List<Bench> createBenches(int ofEach, BenchFactory... factories) {
        List<Bench> l = new ArrayList<>(ofEach * factories.length);

        // note how the bench objects of different objects become intermingled, this is by design
        for (int i = 0; i < ofEach; ++i) {
            for (BenchFactory factory : factories) {
                l.add(factory.produce());
            }
        }
        return l;
    }
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