MockDoseProgressEstimator.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // MockDoseProgressEstimator.swift
  3. // MockKit
  4. //
  5. // Created by Pete Schwamb on 3/17/19.
  6. // Copyright © 2019 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import LoopKit
  10. class MockDoseProgressEstimator: DoseProgressTimerEstimator {
  11. public let dose: DoseEntry
  12. override var progress: DoseProgress {
  13. let elapsed = -dose.startDate.timeIntervalSinceNow
  14. let duration = dose.endDate.timeIntervalSince(dose.startDate)
  15. let percentProgress = min(elapsed / duration, 1)
  16. let delivered = round(percentProgress * dose.programmedUnits * 20) / 20
  17. return DoseProgress(deliveredUnits: delivered, percentComplete: delivered / dose.programmedUnits)
  18. }
  19. public init(reportingQueue: DispatchQueue, dose: DoseEntry) {
  20. self.dose = dose
  21. super.init(reportingQueue: reportingQueue)
  22. }
  23. override func timerParameters() -> (delay: TimeInterval, repeating: TimeInterval) {
  24. let timeSinceStart = -dose.startDate.timeIntervalSinceNow
  25. let timeBetweenPulses: TimeInterval
  26. switch dose.type {
  27. case .bolus:
  28. timeBetweenPulses = TimeInterval(2)
  29. case .basal, .tempBasal:
  30. timeBetweenPulses = 0.05 / dose.unitsPerHour * .hours(1)
  31. default:
  32. fatalError("Can only estimate progress on basal rates or boluses.")
  33. }
  34. let delayUntilNextPulse = timeBetweenPulses - timeSinceStart.remainder(dividingBy: timeBetweenPulses)
  35. return (delay: delayUntilNextPulse, repeating: timeBetweenPulses)
  36. }
  37. }