// // Includes+Arbitrary.swift // JSONAPIArbitrary // // Created by Mathew Polzin on 1/21/19. // import SwiftCheck import JSONAPI extension Includes: Arbitrary where I: Arbitrary { public static var arbitrary: Gen> { return I .arbitrary .proliferate .map(Includes.init(values:)) } } extension NoIncludes: Arbitrary { public static var arbitrary: Gen { return Gen.pure(NoIncludes()) } } extension Include1: Arbitrary where A: Arbitrary { public static var arbitrary: Gen> { return Gen.one(of: [ A.arbitrary.map(Include1.init) ]) } } extension Include2: Arbitrary where A: Arbitrary, B: Arbitrary { public static var arbitrary: Gen> { return Gen.one(of: [ A.arbitrary.map(Include2.init), B.arbitrary.map(Include2.init) ]) } } extension Include3: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary { public static var arbitrary: Gen> { return Gen.one(of: [ A.arbitrary.map(Include3.init), B.arbitrary.map(Include3.init), C.arbitrary.map(Include3.init) ]) } } extension Include4: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary { public static var arbitrary: Gen> { return Gen.one(of: [ A.arbitrary.map(Include4.init), B.arbitrary.map(Include4.init), C.arbitrary.map(Include4.init), D.arbitrary.map(Include4.init) ]) } } extension Include5: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary { public static var arbitrary: Gen> { return Gen.one(of: [ A.arbitrary.map(Include5.init), B.arbitrary.map(Include5.init), C.arbitrary.map(Include5.init), D.arbitrary.map(Include5.init), E.arbitrary.map(Include5.init) ]) } } extension Include6: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary { public static var arbitrary: Gen> { // Note broken up because compiler cannot typecheck entire array // before it times out let set1: [Gen>] = [ A.arbitrary.map(Include6.init), B.arbitrary.map(Include6.init), C.arbitrary.map(Include6.init) ] let set2: [Gen>] = [ D.arbitrary.map(Include6.init), E.arbitrary.map(Include6.init), F.arbitrary.map(Include6.init) ] return Gen.one(of: set1 + set2) } } extension Include7: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary { public static var arbitrary: Gen> { // Note broken up because compiler cannot typecheck entire array // before it times out let set1: [Gen>] = [ A.arbitrary.map(Include7.init), B.arbitrary.map(Include7.init), C.arbitrary.map(Include7.init) ] let set2: [Gen>] = [ D.arbitrary.map(Include7.init), E.arbitrary.map(Include7.init), F.arbitrary.map(Include7.init), G.arbitrary.map(Include7.init) ] return Gen.one(of: set1 + set2) } } extension Include8: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary { public static var arbitrary: Gen> { // Note broken up because compiler cannot typecheck entire array // before it times out let set1: [Gen>] = [ A.arbitrary.map(Include8.init), B.arbitrary.map(Include8.init), C.arbitrary.map(Include8.init) ] let set2: [Gen>] = [ D.arbitrary.map(Include8.init), E.arbitrary.map(Include8.init), F.arbitrary.map(Include8.init) ] let set3: [Gen>] = [ G.arbitrary.map(Include8.init), H.arbitrary.map(Include8.init) ] return Gen.one(of: set1 + set2 + set3) } } extension Include9: Arbitrary where A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary, I: Arbitrary { public static var arbitrary: Gen> { // Note broken up because compiler cannot typecheck entire array // before it times out let set1: [Gen>] = [ A.arbitrary.map(Include9.init), B.arbitrary.map(Include9.init), C.arbitrary.map(Include9.init) ] let set2: [Gen>] = [ D.arbitrary.map(Include9.init), E.arbitrary.map(Include9.init), F.arbitrary.map(Include9.init) ] let set3: [Gen>] = [ G.arbitrary.map(Include9.init), H.arbitrary.map(Include9.init), I.arbitrary.map(Include9.init) ] return Gen.one(of: set1 + set2 + set3) } }