public static Field sequentiallyNumberedValueField(final String name,
                                                       final String format,
                                                       final int startInc,
                                                       final int endExc) {
        try {
            Objects.requireNonNull(format);

            final AtomicLoopedLongSequence numberSequence = new AtomicLoopedLongSequence(
                    startInc,
                    endExc);

            final Supplier<String> supplier = () ->
                    String.format(format, numberSequence.getNext());

            return new Field(name, supplier);
        } catch (Exception e) {
            throw new RuntimeException(Utils.message(
                    "Error building sequentiallyNumberedValueField, {}, {}", name, e.getMessage()), e);
        }
    }
Returns numbered values where the value is defined by a format and the number increases
sequentially and loops back round when it hits endEx.

@param name     Field name for use in the header
@param format   {@link String#format} compatible format containing a single
                placeholder, e.g. "user-%s" or "user-%03d"
@param startInc The lowest value to use in the string format (inclusive)
@param endExc   The highest value to use in the string format (exclusive)
                replace the %s in the format string
@return A complete {@link Field}
stroom-test-common/src/main/java/stroom/test/common/data/DataGenerator.java