Created
June 19, 2021 19:43
-
-
Save atierian/7aee4c2a34806c4477b6d241e917cdbb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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