Skip to content

Instantly share code, notes, and snippets.

@atierian
Created June 19, 2021 19:43
Show Gist options
  • Select an option

  • Save atierian/7aee4c2a34806c4477b6d241e917cdbb to your computer and use it in GitHub Desktop.

Select an option

Save atierian/7aee4c2a34806c4477b6d241e917cdbb to your computer and use it in GitHub Desktop.
import Foundation
import XCTest
infix operator >?< : DefaultPrecedence
extension Date {
/// Generate a random date between two dates - Dates do not need to be in order
/// - Parameters:
/// - start: first date
/// - end: second date
/// - Returns: Random `Date` between two dates
static func randomBetween(start: Date, end: Date) -> Date {
Date(timeIntervalSince1970:
TimeInterval.random(
in: min(start, end).timeIntervalSince1970
... max(start, end).timeIntervalSince1970)
)
}
/// Generate a random date between two dates - Dates do not need to be in order
/// - Parameters:
/// - start: first date
/// - end: second date
/// - generator: `RandomNumberGenerator`
/// - Returns: Random `Date` between two dates
static func randomBetween<T: RandomNumberGenerator>(start: Date, end: Date, using generator: inout T) -> Date {
Date(timeIntervalSince1970:
TimeInterval.random(
in: min(start, end).timeIntervalSince1970
... max(start, end).timeIntervalSince1970,
using: &generator
)
)
}
/// Generate a random date between two dates - Dates do not need to be in order
/// - Parameters:
/// - start: first date
/// - end: second date
/// - Returns: Random `Date` between two dates
static func >?< (lhs: Self, rhs: Self) -> Self {
randomBetween(start: lhs, end: rhs)
}
}
// MARK: Tests
class RandomDateTests: XCTestCase {
func testRandom() {
let date1 = Date(timeIntervalSince1970: 100_000)
let date2 = Date(timeIntervalSince1970: 150_000)
let randomDate = Date.randomBetween(start: date1, end: date2)
XCTAssertTrue(date1...date2 ~= randomDate)
let anotherRandomDate = date1 >?< date2
XCTAssertTrue(date1...date2 ~= anotherRandomDate)
}
}
RandomDateTests.defaultTestSuite.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment