Skip to content

Instantly share code, notes, and snippets.

@to4iki
Last active December 16, 2018 12:49
Show Gist options
  • Save to4iki/6b9c8270158caa9caa22505d1491a916 to your computer and use it in GitHub Desktop.
Save to4iki/6b9c8270158caa9caa22505d1491a916 to your computer and use it in GitHub Desktop.
// MARK: Date + SwiftCheck
extension Date: RandomType {
public static func randomInRange<G : RandomGeneneratorType>(_ range : (Date, Date), gen : G) -> (Date, G) {
let (min, max) = range
let (t, gen2) = Double.randomInRange((min.timeIntervalSince1970, max.timeIntervalSince1970), gen: gen)
return (Date(timeIntervalSince1970: t), gen2)
}
}
extension Date: Arbitrary {
public static var arbitrary: SwiftCheck.Gen<Date> {
return Gen.fromElements(in: Date(timeIntervalSince1970: 0)...Date(timeIntervalSince1970: TimeInterval(Int32.max)))
}
/// - See Also: `SwiftCheck.Double.shrink`
/// - https://github.com/typelift/SwiftCheck/blob/794a986232e70bebe008e776a7e181d766aee254/Sources/SwiftCheck/Arbitrary.swift#L266-L293
public static func shrink(_ date:
let double = date.timeIntervalSince1970
let tail = Int64(double).shrinkIntegral.map { Date(timeIntervalSince1970: Double($0)) }
if double.sign == .minus {
return [Date(timeIntervalSince1970: Swift.abs(double))] + tail
}
return tail
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment