blob: e942c4f7010aa7546a2eaf162b9f53523ee3e997 [file] [log] [blame]
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
import Foundation
#if FOUNDATION_XCTEST
import XCTest
class TestDateIntervalSuper : XCTestCase { }
#else
import StdlibUnittest
class TestDateIntervalSuper { }
#endif
class TestDateInterval : TestDateIntervalSuper {
func dateWithString(_ str: String) -> Date {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .gregorian)
formatter.locale = Locale(identifier: "en_US")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
return formatter.date(from: str)! as Date
}
func test_compareDateIntervals() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start = dateWithString("2010-05-17 14:49:47 -0700")
let duration: TimeInterval = 10000000.0
let testInterval1 = DateInterval(start: start, duration: duration)
let testInterval2 = DateInterval(start: start, duration: duration)
expectEqual(testInterval1, testInterval2)
expectEqual(testInterval2, testInterval1)
expectEqual(testInterval1.compare(testInterval2), ComparisonResult.orderedSame)
let testInterval3 = DateInterval(start: start, duration: 10000000000.0)
expectTrue(testInterval1 < testInterval3)
expectTrue(testInterval3 > testInterval1)
let earlierStart = dateWithString("2009-05-17 14:49:47 -0700")
let testInterval4 = DateInterval(start: earlierStart, duration: duration)
expectTrue(testInterval4 < testInterval1)
expectTrue(testInterval1 > testInterval4)
}
}
func test_isEqualToDateInterval() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start = dateWithString("2010-05-17 14:49:47 -0700")
let duration = 10000000.0
let testInterval1 = DateInterval(start: start, duration: duration)
let testInterval2 = DateInterval(start: start, duration: duration)
expectEqual(testInterval1, testInterval2)
let testInterval3 = DateInterval(start: start, duration: 100.0)
expectNotEqual(testInterval1, testInterval3)
}
}
func test_checkIntersection() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start1 = dateWithString("2010-05-17 14:49:47 -0700")
let end1 = dateWithString("2010-08-17 14:49:47 -0700")
let testInterval1 = DateInterval(start: start1, end: end1)
let start2 = dateWithString("2010-02-17 14:49:47 -0700")
let end2 = dateWithString("2010-07-17 14:49:47 -0700")
let testInterval2 = DateInterval(start: start2, end: end2)
expectTrue(testInterval1.intersects(testInterval2))
let start3 = dateWithString("2010-10-17 14:49:47 -0700")
let end3 = dateWithString("2010-11-17 14:49:47 -0700")
let testInterval3 = DateInterval(start: start3, end: end3)
expectFalse(testInterval1.intersects(testInterval3))
}
}
func test_validIntersections() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start1 = dateWithString("2010-05-17 14:49:47 -0700")
let end1 = dateWithString("2010-08-17 14:49:47 -0700")
let testInterval1 = DateInterval(start: start1, end: end1)
let start2 = dateWithString("2010-02-17 14:49:47 -0700")
let end2 = dateWithString("2010-07-17 14:49:47 -0700")
let testInterval2 = DateInterval(start: start2, end: end2)
let start3 = dateWithString("2010-05-17 14:49:47 -0700")
let end3 = dateWithString("2010-07-17 14:49:47 -0700")
let testInterval3 = DateInterval(start: start3, end: end3)
let intersection1 = testInterval2.intersection(with: testInterval1)
expectNotNil(intersection1)
expectEqual(testInterval3, intersection1)
let intersection2 = testInterval1.intersection(with: testInterval2)
expectNotNil(intersection2)
expectEqual(intersection1, intersection2)
}
}
func test_containsDate() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start = dateWithString("2010-05-17 14:49:47 -0700")
let duration = 10000000.0
let testInterval = DateInterval(start: start, duration: duration)
let containedDate = dateWithString("2010-05-17 20:49:47 -0700")
expectTrue(testInterval.contains(containedDate))
let earlierStart = dateWithString("2009-05-17 14:49:47 -0700")
expectFalse(testInterval.contains(earlierStart))
}
}
func test_AnyHashableContainingDateInterval() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start = dateWithString("2010-05-17 14:49:47 -0700")
let duration = 10000000.0
let values: [DateInterval] = [
DateInterval(start: start, duration: duration),
DateInterval(start: start, duration: duration / 2),
DateInterval(start: start, duration: duration / 2),
]
let anyHashables = values.map(AnyHashable.init)
expectEqual(DateInterval.self, type(of: anyHashables[0].base))
expectEqual(DateInterval.self, type(of: anyHashables[1].base))
expectEqual(DateInterval.self, type(of: anyHashables[2].base))
expectNotEqual(anyHashables[0], anyHashables[1])
expectEqual(anyHashables[1], anyHashables[2])
}
}
func test_AnyHashableCreatedFromNSDateInterval() {
if #available(iOS 10.10, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
let start = dateWithString("2010-05-17 14:49:47 -0700")
let duration = 10000000.0
let values: [NSDateInterval] = [
NSDateInterval(start: start, duration: duration),
NSDateInterval(start: start, duration: duration / 2),
NSDateInterval(start: start, duration: duration / 2),
]
let anyHashables = values.map(AnyHashable.init)
expectEqual(DateInterval.self, type(of: anyHashables[0].base))
expectEqual(DateInterval.self, type(of: anyHashables[1].base))
expectEqual(DateInterval.self, type(of: anyHashables[2].base))
expectNotEqual(anyHashables[0], anyHashables[1])
expectEqual(anyHashables[1], anyHashables[2])
}
}
}
#if !FOUNDATION_XCTEST
var DateIntervalTests = TestSuite("TestDateInterval")
DateIntervalTests.test("test_compareDateIntervals") { TestDateInterval().test_compareDateIntervals() }
DateIntervalTests.test("test_isEqualToDateInterval") { TestDateInterval().test_isEqualToDateInterval() }
DateIntervalTests.test("test_checkIntersection") { TestDateInterval().test_checkIntersection() }
DateIntervalTests.test("test_validIntersections") { TestDateInterval().test_validIntersections() }
DateIntervalTests.test("test_AnyHashableContainingDateInterval") { TestDateInterval().test_AnyHashableContainingDateInterval() }
DateIntervalTests.test("test_AnyHashableCreatedFromNSDateInterval") { TestDateInterval().test_AnyHashableCreatedFromNSDateInterval() }
runAllTests()
#endif