| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import Foundation
- import Testing
- @testable import Trio
- @Suite("IoB generate tests") struct IobGenerateTests {
- /// One of our performance optimizations where we filter old pump events has subtle interactions
- /// with the JS implementation. In particular, JS will hardcode 8 hours for DIA in the suspend logic
- /// when a pump history has a resume as the first suspend/resume event. This hard coded value
- /// can cause some old netbasalinsulin to get dropped if DIA > 8 hours. We fixed this bug by
- /// not filtering suspend and resume events, and this test case checks for the bug fix.
- @Test("should test suspend filtering") func testSuspendFiltering() async throws {
- let now = Calendar.current.startOfDay(for: Date()) + 20.hoursToSeconds
- let history = [
- PumpHistoryEvent(id: UUID().uuidString, type: .pumpSuspend, timestamp: now - 15.hoursToSeconds),
- PumpHistoryEvent(id: UUID().uuidString, type: .pumpResume, timestamp: now - 1.hoursToSeconds)
- ]
- var profile = Profile()
- profile.dia = 10
- profile.currentBasal = 1
- profile.maxDailyBasal = 1
- profile.basalprofile = [
- BasalProfileEntry(
- start: "00:00:00",
- minutes: 0,
- rate: 1
- )
- ]
- profile.suspendZerosIob = true
- let iob = try IobGenerator.generate(history: history, profile: profile, clock: now, autosens: nil)
- // Matches the long suspend test in JS iob.test.js
- #expect(iob[0].netbasalinsulin == -8.95)
- }
- }
|