99 lines
3.0 KiB
Swift
99 lines
3.0 KiB
Swift
//
|
|
// TestSchedulerVirtualTimeConverter.swift
|
|
// Rx
|
|
//
|
|
// Created by Krunoslav Zaher on 12/23/15.
|
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import RxSwift
|
|
|
|
/**
|
|
Converter from virtual time and time interval measured in `Int`s to `NSDate` and `NSTimeInterval`.
|
|
*/
|
|
public struct TestSchedulerVirtualTimeConverter : VirtualTimeConverterType {
|
|
/**
|
|
Virtual time unit used that represents ticks of virtual clock.
|
|
*/
|
|
public typealias VirtualTimeUnit = Int
|
|
|
|
/**
|
|
Virtual time unit used to represent differences of virtual times.
|
|
*/
|
|
public typealias VirtualTimeIntervalUnit = Int
|
|
|
|
private let _resolution: Double
|
|
|
|
init(resolution: Double) {
|
|
_resolution = resolution
|
|
}
|
|
|
|
|
|
/**
|
|
Converts virtual time to real time.
|
|
|
|
- parameter virtualTime: Virtual time to convert to `NSDate`.
|
|
- returns: `NSDate` corresponding to virtual time.
|
|
*/
|
|
public func convertFromVirtualTime(_ virtualTime: VirtualTimeUnit) -> RxTime {
|
|
return Date(timeIntervalSince1970: RxTimeInterval(virtualTime) * _resolution)
|
|
}
|
|
|
|
/**
|
|
Converts real time to virtual time.
|
|
|
|
- parameter time: `NSDate` to convert to virtual time.
|
|
- returns: Virtual time corresponding to `NSDate`.
|
|
*/
|
|
public func convertToVirtualTime(_ time: RxTime) -> VirtualTimeUnit {
|
|
return VirtualTimeIntervalUnit(time.timeIntervalSince1970 / _resolution + 0.5)
|
|
}
|
|
|
|
/**
|
|
Converts from virtual time interval to `NSTimeInterval`.
|
|
|
|
- parameter virtualTimeInterval: Virtual time interval to convert to `NSTimeInterval`.
|
|
- returns: `NSTimeInterval` corresponding to virtual time interval.
|
|
*/
|
|
public func convertFromVirtualTimeInterval(_ virtualTimeInterval: VirtualTimeIntervalUnit) -> RxTimeInterval {
|
|
return RxTimeInterval(virtualTimeInterval) * _resolution
|
|
}
|
|
|
|
/**
|
|
Converts from virtual time interval to `NSTimeInterval`.
|
|
|
|
- parameter timeInterval: `NSTimeInterval` to convert to virtual time interval.
|
|
- returns: Virtual time interval corresponding to time interval.
|
|
*/
|
|
public func convertToVirtualTimeInterval(_ timeInterval: RxTimeInterval) -> VirtualTimeIntervalUnit {
|
|
return VirtualTimeIntervalUnit(timeInterval / _resolution + 0.5)
|
|
}
|
|
|
|
/**
|
|
Adds virtual time and virtual time interval.
|
|
|
|
- parameter time: Virtual time.
|
|
- parameter offset: Virtual time interval.
|
|
- returns: Time corresponding to time offsetted by virtual time interval.
|
|
*/
|
|
public func offsetVirtualTime(_ time: VirtualTimeUnit, offset: VirtualTimeIntervalUnit) -> VirtualTimeUnit {
|
|
return time + offset
|
|
}
|
|
|
|
/**
|
|
Compares virtual times.
|
|
*/
|
|
public func compareVirtualTime(_ lhs: VirtualTimeUnit, _ rhs: VirtualTimeUnit) -> VirtualTimeComparison {
|
|
if lhs < rhs {
|
|
return .lessThan
|
|
}
|
|
else if lhs > rhs {
|
|
return .greaterThan
|
|
}
|
|
else {
|
|
return .equal
|
|
}
|
|
}
|
|
}
|