private static Arbitrary<EncodedDataTypeSchema> encodedDataTypeSchema()
    {
        return Combinators.combine(
            Arbitraries.of(PrimitiveType.values()),
            Arbitraries.of(1, 1, 1, 2, 13),
            presence(),
            Arbitraries.of(true, false)
        ).as(EncodedDataTypeSchema::new);
    }
This combinator adds duplicates to an arbitrary list. We prefer this to JQwik's built-in functionality,
as that is inefficient and dominates test runs.
<p>
This method works by generating a list of integers, which represent, in an alternating manner,
the number of items to skip before <i>selecting</i> an item to duplicate
and the number of items to skip before <i>inserting</i> the duplicate.

@param maxDuplicates the maximum number of duplicates to add
@param arbitrary     the arbitrary list to duplicate items in
@param <T>           the type of the list
@return an arbitrary list with duplicates
sbe-tool/src/propertyTest/java/uk/co/real_logic/sbe/properties/arbitraries/SbeArbitraries.java