public static Arbitrary <CborPropertyTestContext> PropertyTestInput() { Arbitrary <NonEmptyArray <CborDocument> > documentArb = Arb.Default.NonEmptyArray <CborDocument>(); Arbitrary <bool> convertArb = Arb.Default.Bool(); Gen <CborConformanceMode> conformanceModes = Gen.Elements( CborConformanceMode.Lax, CborConformanceMode.Strict, CborConformanceMode.Canonical, CborConformanceMode.Ctap2Canonical); Gen <CborPropertyTestContext> inputGen = from docs in documentArb.Generator from convert in convertArb.Generator from mode in conformanceModes select CborPropertyTestContextHelper.create(mode, convert, docs.Get); IEnumerable <CborPropertyTestContext> Shrinker(CborPropertyTestContext input) { var nonEmptyArrayInput = NonEmptyArray <CborDocument> .NewNonEmptyArray(input.RootDocuments); foreach (NonEmptyArray <CborDocument> shrunkDoc in documentArb.Shrinker(nonEmptyArrayInput)) { yield return(CborPropertyTestContextHelper.create(input.ConformanceMode, input.ConvertIndefiniteLengthItems, input.RootDocuments)); } } return(Arb.From(inputGen, Shrinker)); }