| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- //
- // HistoryPageTests.swift
- // RileyLink
- //
- // Created by Pete Schwamb on 3/7/16.
- // Copyright © 2016 Pete Schwamb. All rights reserved.
- //
- import XCTest
- @testable import MinimedKit
- class HistoryPageTests: XCTestCase {
-
- func testHistoryPageCRC() {
- let pumpModel = PumpModel.model551
- do {
- let _ = try HistoryPage(pageData: Data(hexadecimalString: "6e2190050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0802101122007b0200c01602102c1c007b0000c000031000160007000002be22900000006e2290050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de08031011220034640edc120310810123ef12031000101111117d0223ef12031000a2ce8aa0001011111100000000000000000000000000000000000000007b0200c01603102c1c0021001cce16031003000000100fd03603107b021edb1603102c1c0003000100011cdb160310820106dc16031000a2ce8aa0820108dc16031000101111117b0000c000041000160007000002b823900000006e2390050000000000000002b802b8640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0804101122007b0200c01604102c1c007b0000c000051000160007000002be24900000006e2490050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0805101122007b0200c01605102c1c007b0000c000061000160007000002be25900000006e2590050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0806101122007b0200c01606102c1c007b0000c000071000160007000002be26900000006e2690050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de08071011220081010bec0a071000a2ce8aa07d010bec0a071000a2ce8aa000000000000000000000000000000000000000000000000000820108c40b071000a2ce8aa081010cc40b071000a2ce8aa07d010cc40b071000a2ce8aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004475")!, pumpModel: pumpModel)
- } catch HistoryPageError.invalidCRC {
- XCTFail("page decoding threw invalid crc")
- } catch HistoryPageError.unknownEventType(let eventType) {
- XCTFail("unknown event type" + String(eventType))
- } catch {
- XCTFail("Unexpected exception...")
- }
- }
-
- func testHistoryParsingShouldNotContinuePastAlarmsIndicatingUnrecoverableClock() {
- do {
- let page = try HistoryPage(pageData: Data(hexadecimalString:
- "6dbb94050c00e80000000001c600ca2c00fc38000000fc3800000000000000fc6402000000020c00e80000002601a6e2005c1427000000000000280f423f0000001400aae2005c141700abe2005c141800abe2005c140106060097d84b5c1401232300b0e44b5c141700a8c70c5c141800a8c70c5c1401141400afd94d5c1401323200a3d24e5c141e00abd90e1c141f00a2eb0e1c14011e1e00a2d84f5c14011e1e00afe7501c140615050d0040600105061104e9004040a1050c15124000010564000a4000010517001e40000105180000400001052100034000010503000000001640200105170009420041051800b6ee115c14070000000201856d0185050c00e8000000000002000264000000000000000000000000000000000000000000000c00e80000001700b6ee115c141800b6ee115c143300b8f0115c14001601b8f0115c14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008559")!, pumpModel: .model522)
- XCTAssertEqual(31, page.events.count)
-
- let startDate = ISO8601DateFormatter().date(from: "2020-11-20T00:00:00Z")!
- let timeZone = TimeZone(secondsFromGMT: -21600)!
-
- let (timestampedEvents, hasMoreEvents, _) = page.timestampedEvents(after: startDate, timeZone: timeZone, model: .model522)
-
- XCTAssertEqual(11, timestampedEvents.count)
- } catch {
- XCTFail("Unexpected exception...")
- }
- }
-
- func testHistoryPageInvalidCRC() {
- let pumpModel = PumpModel.model551
- do {
- let _ = try HistoryPage(pageData: Data(hexadecimalString: "6e2190050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0802101122007b0200c01602102c1c007b0000c000031000160007000002be22900000006e2290050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de08031011220034640edc120310810123ef12031000101111117d0223ef12031000a2ce8aa0001011111100000000000000000000000000000000000000007b0200c01603102c1c0021001cce16031003000000100fd03603107b021edb1603102c1c0003000100011cdb160310820106dc16031000a2ce8aa0820108dc16031000101111117b0000c000041000160007000002b823900000006e2390050000000000000002b802b8640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0804101122007b0200c01604102c1c007b0000c000051000160007000002be24900000006e2490050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0805101122007b0200c01605102c1c007b0000c000061000160007000002be25900000006e2590050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de0806101122007b0200c01606102c1c007b0000c000071000160007000002be26900000006e2690050000000000000002be02be640000000000000000000000000000000000000000000000000000000000000000000000007b0100de08071011220081010bec0a071000a2ce8aa07d010bec0a071000a2ce8aa000000000000000000000000000000000000000000000000000820108c40b071000a2ce8aa081010cc40b071000a2ce8aa07d010cc40b071000a2ce8aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004455")!, pumpModel: pumpModel)
- XCTFail("Should have thrown InvalidCRC")
- } catch HistoryPageError.invalidCRC {
- // Happy path
- } catch HistoryPageError.unknownEventType(let eventType) {
- XCTFail("unknown event type" + String(eventType))
- } catch {
- XCTFail("Unexpected exception...")
- }
- }
-
-
- func testTempBasalDecoding() {
- let pumpModel = PumpModel.model551
- do {
- let page = try HistoryPage(pageData: Data(hexadecimalString: "160179230c121033104a2a0c12100016014a2a0c1210330854000d121000160154000d12107b05541e0d1210180a007b064000101210200e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004876")!, pumpModel: pumpModel)
-
- let events = page.events
- XCTAssertEqual(events.count, 7)
-
- let duration = events[0] as! TempBasalDurationPumpEvent
- XCTAssertEqual(duration.duration, 30)
- XCTAssertEqual(duration.timestamp, DateComponents(gregorianYear: 2016, month: 4, day: 18, hour: 12, minute: 35, second: 57))
-
- let tempBasal = events[1] as! TempBasalPumpEvent
- XCTAssertEqual(tempBasal.rateType, TempBasalPumpEvent.RateType.Absolute)
- XCTAssertEqual(tempBasal.rate, 0.4)
- XCTAssertEqual(tempBasal.timestamp, DateComponents(gregorianYear: 2016, month: 4, day: 18, hour: 12, minute: 42, second: 10))
-
- let duration2 = events[2] as! TempBasalDurationPumpEvent
- XCTAssertEqual(duration2.duration, 30)
- XCTAssertEqual(duration2.timestamp, DateComponents(gregorianYear: 2016, month: 4, day: 18, hour: 12, minute: 42, second: 10))
-
- } catch HistoryPageError.invalidCRC {
- XCTFail("page decoding threw invalid crc")
- } catch HistoryPageError.unknownEventType(_) {
- XCTFail("unknown event type")
- } catch {
- XCTFail("Unexpected exception...")
- }
- }
-
- func testHistoryDecoding() {
- let pumpModel = PumpModel.model551
- do {
- let page = try HistoryPage(pageData: Data(hexadecimalString: "5be409a20a1510325000784b502800a400002400a8965c0b404fc038cbd008d5d0010080008000240009a24a15107b0500800c1510180a000ade19a32c15105bde2ba30c1510325000b44b5024006c0000200070965c0b4c78c03482c040c8c001007000700020002ba34c15100a0c22932d75903f2122938d7510c527ad5b0006900f15101a5000b44b500000380000000038965c0e70a1c04c19d03423d04069d00100380038000c0006904f15107b060080101510200e005b0034ab1015100d5000784b500000280000000028965c113858c070f8c04c70d0347ad040c0d00100280028001c0034ab5015100ab005863175903f360586117510c527ad5bb01486111510005100784b50940000000038005c965c14281fc0386fc0700fd04c87d03491d040d7d001005c005c00380014865115105b002291121510285000784b500000840000000084965c145c48c02866c038b6c07056d04cced034d8d0010084008400480022915215107b0700801315102610002100038414151003000000360785341510064a097e009e54b5100c4a03a11415107b0704a11415102610007b0704a11415102610007b0710a1141510261000030003000306a11415100ae937a23475103f1d37a2347510c527ad5be91ea3141510165000784b502c00480000140060965c0e848cc05cd2c028f0c03840d001006000600014001ea35415107b0800801515102a13000a5621ba3515905b5623ba151510005100b455505800000000340024965c116053c084dfc05c25d02843d03893d0010024002400340023ba5515105b00188c161510005000b455500000000000000000965c142411c06061c084edc05c33d02851d038a1d00100180018004c00188c5615100a7339ac3615905b7305ad161510005100b455506800000000480020965c171828c02432c06082c0840ed05c54d02872d038c2d0010034003400440005ad5615100a55158c3775903f2a158cb77510c527ad5b55278c171510005100b455505800000000600000965c1a341bc01843c0244dc0609dc08429d05c6fd0288dd038ddd00100180018006000278c5715100a1930b73715905b1901b8171510005100b455503c00000000440000965c1a1833c03447c0186fc02479c060c9c08455d05c9bd028b9d0010018001800440001b85715107b000080001610000e0007000004f035100000006e351005112ce9b00a000004f001401903b04b00dd01a4013c00d0000005070200040000000000000000de730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc5e")!, pumpModel: pumpModel)
-
- let events = page.events
- XCTAssertGreaterThan(events.count, 20)
-
- let bolusWizard = events[0] as! BolusWizardEstimatePumpEvent
- XCTAssertEqual(bolusWizard.bgTargetHigh, 150)
- XCTAssertEqual(bolusWizard.bgTargetLow, 80)
- XCTAssertEqual(bolusWizard.bloodGlucose, 228)
- XCTAssertEqual(bolusWizard.bolusEstimate, 4.2)
- XCTAssertEqual(bolusWizard.carbohydrates, 50)
- XCTAssertEqual(bolusWizard.carbRatio, 12.0)
- XCTAssertEqual(bolusWizard.correctionEstimate, 1.0)
- XCTAssertEqual(bolusWizard.foodEstimate, 4.1)
- XCTAssertEqual(bolusWizard.insulinSensitivity, 75)
- XCTAssertEqual(bolusWizard.unabsorbedInsulinTotal, 0.9)
- XCTAssertEqual(bolusWizard.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 10, minute: 34, second: 9))
-
- let bolus = events[1] as! BolusNormalPumpEvent
- XCTAssertEqual(bolus.amount, 3.2)
- XCTAssertEqual(bolus.type, BolusNormalPumpEvent.BolusType.normal)
- XCTAssertEqual(bolus.duration, 0)
- XCTAssertEqual(bolus.programmed, 3.2)
- XCTAssertEqual(bolus.unabsorbedInsulinTotal, 0.9)
- XCTAssertEqual(bolus.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 10, minute: 34, second: 9))
-
- let unabsorbedInsulinRecords = bolus.unabsorbedInsulinRecord!.records
- XCTAssertEqual(unabsorbedInsulinRecords.count, 3)
- XCTAssertEqual(unabsorbedInsulinRecords[0].amount, 1.6)
- XCTAssertEqual(unabsorbedInsulinRecords[0].age, 79)
- XCTAssertEqual(unabsorbedInsulinRecords[1].amount, 1.4)
- XCTAssertEqual(unabsorbedInsulinRecords[1].age, 459)
- XCTAssertEqual(unabsorbedInsulinRecords[2].amount, 0.2)
- XCTAssertEqual(unabsorbedInsulinRecords[2].age, 469)
-
- let basalProfileStart = events[2] as! BasalProfileStartPumpEvent
- XCTAssertEqual(basalProfileStart.dictionaryRepresentation["offset"] as! Int, 43200000)
- XCTAssertEqual(basalProfileStart.scheduleEntry.timeOffset, 43200)
- XCTAssertEqual(basalProfileStart.scheduleEntry.rate, 0.25)
- XCTAssertEqual(basalProfileStart.scheduleEntry.index, 5)
- XCTAssertEqual(basalProfileStart.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 12, minute: 0, second: 0))
-
- let calBGForPH = events[3] as! CalBGForPHPumpEvent
- XCTAssertEqual(calBGForPH.amount, 222)
- XCTAssertEqual(calBGForPH.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 12, minute: 35, second: 25))
-
- let bgReceived = events[7] as! BGReceivedPumpEvent
- XCTAssertEqual(bgReceived.amount, 268)
- XCTAssertEqual(bgReceived.meter, "c527ad")
- XCTAssertEqual(bgReceived.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 13, minute: 19, second: 34))
-
- let rewind = events[20] as! RewindPumpEvent
- XCTAssertEqual(rewind.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 20, minute: 4, second: 3))
-
- let prime = events[21] as! PrimePumpEvent
- XCTAssertEqual(prime.amount, 5.4)
- XCTAssertEqual(prime.primeType, "manual")
- XCTAssertEqual(prime.programmedAmount, 0.0)
- XCTAssertEqual(prime.timestamp, DateComponents(gregorianYear: 2016, month: 2, day: 21, hour: 20, minute: 5, second: 7))
-
- let resultTotals = events[50] as! DailyTotal523PumpEvent
- // 2016-02-22T00:00:00
- var resultTotalsDate = DateComponents()
- resultTotalsDate.calendar = Calendar(identifier: Calendar.Identifier.gregorian)
- resultTotalsDate.year = 2016
- resultTotalsDate.month = 2
- resultTotalsDate.day = 21
-
- XCTAssertEqual(resultTotals.timestamp, resultTotalsDate)
-
- var timestamp = resultTotals.timestamp
- timestamp.timeZone = TimeZone(secondsFromGMT: -5 * 60 * 60)
-
- XCTAssertEqual(resultTotals.dictionaryRepresentation["validDate"] as? String, "2016-02-21")
-
- } catch HistoryPageError.invalidCRC {
- XCTFail("page decoding threw invalid crc")
- } catch HistoryPageError.unknownEventType(_) {
- XCTFail("unknown event type")
- } catch {
- XCTFail("Unexpected exception...")
- }
- }
-
- func testHistoryDecoding523() {
- let pumpModel = PumpModel.model523
- do {
- let page = try HistoryPage(pageData: Data(hexadecimalString: "010052005200000042225465105b00443b1465100e5000784b5000002e000000002e785c0e1a18c03822c01658d002dad001002e002e004c00443b5465100a3361023605905b337202166510005100b455505800000000420016785c0e2e43c01a57c03861c01697d0010016001600420072025665107b00400000061000100007000002cb45100000006e45100500e7000002000002cb01512f017a35007b00d60016008e0000040101000400000000000000009b3300000000000000007b014000010610020c000aca48092106105bca4b09010610005000c850502800000000000028785c0e16c2c02efec01a12d0381cd001002800280000004c094106107b024000040610080d007b0340000606100c10005b006a130966101450006e4b5000004800000000487801004800480000006a134966107b0440000a0610140b000afa41362b06105bfa67360b6610475000b44b5044009c00000800d8785c05489fc001006800680008045d38ab6610010070007000080067368b66107b0540000c0610180a007b064000100610200e005b0043191266103c5000784b500000c800000000c8785c2c020ed00818d00822d00a2cd00836d00840d00a4ad00854d0085ed00a68d00872d0087cd06286d01690d0010064001c0000066b1ab26610010064006400000043199266107b0740001306102610001e0165121306107b076e121306102610001f206e12130610210074121306101a0062141306101a01771413061003000000436a153306107b07661b13061026100003000300035c1b1306107b08401e1406102915000a825b103506905b826010150610005100b455507c000000000c0070785c200279c00483c0068dc00697c006a1c068abc002b9d008c3d008cdd00ad7d05b826210150610005100b455507c000000000c0070785c200279c00483c0068dc00697c006a1c068abc002b9d008c3d008cdd00ad7d00100700070000c0062105506100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c4d")!, pumpModel: pumpModel)
-
- let events = page.events
- XCTAssertGreaterThan(events.count, 20)
-
- let bolus = events[0] as! BolusNormalPumpEvent
- XCTAssertEqual(bolus.amount, 2.05)
- XCTAssertEqual(bolus.type, BolusNormalPumpEvent.BolusType.normal)
- XCTAssertEqual(bolus.duration, 0)
- XCTAssertEqual(bolus.programmed, 2.05)
- XCTAssertEqual(bolus.unabsorbedInsulinTotal, 0.0)
-
- let timestamp = DateComponents(gregorianYear: 2016, month: 4, day: 5, hour: 20, minute: 34, second: 02)
-
- XCTAssertEqual(bolus.timestamp, timestamp)
-
- } catch HistoryPageError.invalidCRC {
- XCTFail("page decoding threw invalid crc")
- } catch HistoryPageError.unknownEventType(_) {
- XCTFail("unknown event type")
- } catch {
- XCTFail("Unexpected exception...")
- }
-
- }
-
- func testHistoryDecodingBolusWizardSettings522() {
- let pumpModel = PumpModel.model522
- do {
- let page = try HistoryPage(pageData: Data(hexadecimalString: "5a0f7050141d10151300080000000000000000000000000000001e1414211e00000000000000000000005f69000000000000000000000000000000000000000000151300080000000000000000000000000000001e14142d1e00000000000000000000005f6900000000000000000000000000000000000000000044338c4055145d100016014055145d10333e445a145d10001601445a145d10335a4464145d100016014464145d10335e4069145d100016014069145d10010a0a004a6b341d10010f0f007979341d10010a0a00484b351d103383445a155d10001601445a155d10333c4369155d100016014369155d10011919006f7a351d10333c4b41165d100016014b41165d10333c4e55165d100016014e55165d10333c486e165d10001601486e165d10331b4c73165d100016014c73165d10333c5f4b175d100016015f4b175d1001080800554d371d10010808006a5d371d10333c6564175d100016016564175d1001050500766a371d10333c4878175d100016014878175d100700000a6a5d906d5d90050c00e8000000000a6a056234050830000005083000000000000005086413000000130c00e800000033394a50005e100016014a50005e1033394864005e100016014864005e1033004969005e100016014969005e1033004878005e100016014878005e1033004155015e100016014155015e103348495f015e10001601495f015e1033394564015e100016014564015e1033484a69015e100016014a69015e1033104c73015e100016014c73015e1033394578015e100016014578015e1033394550025e100016014550025e103314465a025e10001601465a025e1033004a5f025e100016014a5f025e103300456e025e10001601456e025e1033004241035e100016014241035e1033004550035e100016014550035e103300495f035e10001601495f035e103300456e035e10001601456e035e1033394678035e100016014678035e10338c4d46045e100016014d46045e10338c4664045e100016014664045e1033444a41055e100016014a41055e10010404007561281e1033447968085e100016017968085e10334a7972085e100016017972085e1033444478085e100016014478085e1033444250095e100016014250095e1033147954095e100016017954095e103344415a095e10001601415a095e10338c7968095e100016017968095e10011414006e6c291e1033447972095e100016017972095e10335841460a5e1000160141460a5e10010a0a0047492a1e10336841500a5e1000160141500a5e10010a0a006b512a1e103344415a0a5e10001601415a0a5e10330041500b5e1000160141500b5e103300455f0b5e10001601455f0b5e103346416e0b5e10001601416e0b5e10334641460c5e100000000000005a49")!, pumpModel: pumpModel)
-
- let events = page.events
-
- let bwsettings = events[0] as! BolusWizardSetupPumpEvent
- var timestamp = DateComponents(gregorianYear: 2016, month: 5, day: 29, hour: 20, minute: 16, second: 48)
- XCTAssertEqual(bwsettings.timestamp, timestamp)
-
-
- let tempBasal = events[1] as! TempBasalPumpEvent
- timestamp = DateComponents(gregorianYear: 2016, month: 5, day: 29, hour: 20, minute: 21, second: 0)
-
- XCTAssertEqual(tempBasal.timestamp, timestamp)
-
- } catch HistoryPageError.invalidCRC {
- XCTFail("page decoding threw invalid crc")
- } catch HistoryPageError.unknownEventType(_) {
- XCTFail("unknown event type")
- } catch {
- XCTFail("Unexpected exception...")
- }
-
- }
- func testHistoryQuestionable3b() throws {
- let pumpModel = PumpModel.model723
- let page = try HistoryPage(pageData: Data(hexadecimalString: "0615036800406001070636036f0040600107062f1dfc004020c107062f0e77004020c107062f0e88004020c107062f0e99004020c107062f0eaa004020c107062f0ebb004020c107062f0ee1004020c107062f0ef4004020c107062f0f05004020c10706110f12004020c10706150411004040a1070c151e400001076401164000010717001f4000010718000040000107190033410001071a003a500401071a010159040107063706753a5044a1071a0030590401070c3730590401071a01135a04010706560692305944a1073b84145a0401070c56275a040107070000000001870000006e0187050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0002570102070603036802576102070c030c4000010764010f400001071700134000010718000040000107070000000002870000006e0287050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100054000010703000000000a402001077b001b4000010700000017001f420041071800758e0d5410070000000001870000006e01870500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064004c8f0d14100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001305")!, pumpModel: pumpModel)
- let events = page.events
- XCTAssertEqual(45, events.count)
- }
- func testMealMarkerFor754() throws {
- let pumpModel = PumpModel.model754
- let page = try HistoryPage(pageData: Data(hexadecimalString: "0b664d61d542aa100b665040e142aa100b720061c143aa100b65ab6adb43aa107b0140c0040a100828007b0240de060a100d32000b730068d048aa100b73006fd149aa100b664d7ad649aa100a5472d7296a103f0a72d7896a10ce26920b73006adb49aa105b004af7090a10289000be3c3200005400000000543201005400540000004af7490a100b700072cb4aaa100b700072d54aaa100b700041e14aaa100b710041f04aaa100abe70da2d6a103f1770dacd6a10ce26925b694cdb0d0a10329000be3c322400680000080084325c0554d4040100a000a00008004cdb4d0a107b0340c00f0a101e32000a7b5ec12f6a103f0f5ec16f6a10ce26920b680057d64faa100a7574df2f6a103f0e74dfaf6a10ce2692140077f22f0a107b0077f22f0a100009000b73005cf44faa100b730057c250aa100b730055cb50aa100b664d4ed050aa100b664f57db50aa100b72006bc151aa1014017af3110a107b037bf3110a101e3200010078007800000051f4510a105b0058c3120a10469000be3c320000900000000090325c08781204a016140100a000a000780058c3520a100b730068ea52aa100b73004ef852aa100a3f70f8326a103f0770f8f26a10ce26920b730057c753aa105b0042e9130a10289000be3c320000540000000054325c0e4260045e6a04787404a07814010054005400980042e9530a100aa35ae5346a103f145ae5746a10ce26925b5a6be5140a10009000be3c371400000000880000375c11543e044298045ea20478ac04a0b0147c014bfb140a1081016dc3150a1000a2148cc87d016dc3150a1000a2148cc8000000000000000000000000000000000000000000000000000b730052ee56aa100b73005ef856aa107b0440c0170a102e32000b664f57c757aa100b73005ccc57aa107b0040c0000b10002800070000067c6a900000006e6a9006007a3fbe070000067c041c3f02602500c800a800000140007802000201007a07510bd620020d00000d01000000000000640043c4000b100b730052c640ab1064017bc6000b100b73004ed040ab10335660d4000b1008163060d4000b100b73005ce040ab100b665657ea40ab100b664e55f340ab100b664d6bc141ab100b66525ccc41ab100b730056ea44ab100b665856c745ab1040005dc9050b100c010b690040c746ab10330073e1070b1008160073e1070b107b0273e1070b100d32000a7a72f0276b103f0f72f0476b10ce24cd5b4452f1070b10009000be3c320c0000000000000c3201000c000c00000052f1470b105b0066c7080b104c9000be3c320000a000000000a0325c050c16040100a000a0000c0066c7480b100b720051ee48ab100b65b25bcc49ab100b72005bf44bab100abe4ffa2b6b103f174ffacb6b10ce24cd33735cfa0b0b100816305cfa0b0b1073da")!, pumpModel: pumpModel)
- let events = page.events
- XCTAssertEqual(93, events.count)
- let mealMarker = events[75] as! JournalEntryMealMarkerPumpEvent
-
- XCTAssertEqual(JournalEntryMealMarkerPumpEvent.CarbUnits.Grams, mealMarker.carbUnits)
- XCTAssertEqual(12, mealMarker.carbohydrates)
-
-
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 11, hour: 5, minute: 9, second: 29), mealMarker.timestamp)
- }
-
- func testInsulinMarker551() throws {
- let pumpModel = PumpModel.model551
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "7b0640c0100b10200e007b0740c0130b102610007b0840de140b102915007b0040c0000c1000100007000001576b900000006e6b90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010c10020c007b0240c0040c10080d007b0340c0060c100c10007b0440c00a0c10140b007b0540c00c0c10180a007b0640c0100c10200e007b0740c0130c102610007b0840de140c102915007b0040c0000d1000100007000001576c900000006e6c90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010d10020c007b0240c0040d10080d007b0340c0060d100c10007b0440c00a0d10140b007b0540c00c0d10180a007b0640c0100d10200e007b0740c0130d102610007b0840de140d102915007b0040c0000e1000100007000001576d900000006e6d90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010e10020c007b0240c0040e10080d007b0340c0060e100c10007b0440c00a0e10140b007b0540c00c0e10180a007b0640c0100e10200e007b0740c0130e102610007b0840de140e102915000ad271c7376e103f1a71c7576e10c527ad7b0040c0000f1000100007000001576e900000006e6e900500d2d2d201000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010f10020c007b0240c0040f10080d007b0340c0060f100c10007b0440c00a0f10140b007b0540c00c0f10180a007b0640c0100f10200e007b0740c0130f102610007b0840de140f102915000a9a45c7366f103f1345c7566f10c527ad7b0040c000101000100007000001576f900000006e6f9005009a9a9a01000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0011010020c007b0240c0041010080d007b0340c00610100c10007b0440c00a1010140b007b0540c00c1010180a0083014dd20d101040016fd20d10102c016f1266f20d10100a5077f22d101040004ef60d1010c8020a5878d5af10107b0640c0101010200e000a5857ca301010430073f010101042de66ed711010000a6559c032101042015cdc121010007b0740c01310102610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dae8")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(72, events.count)
-
- let insulin1 = events[68] as! JournalEntryInsulinMarkerPumpEvent
- XCTAssertEqual(99.0, insulin1.amount)
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 16, hour: 17, minute: 45, second: 38), insulin1.timestamp)
-
- let insulin2 = events[70] as! JournalEntryInsulinMarkerPumpEvent
- XCTAssertEqual(0.1, insulin2.amount)
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 16, hour: 18, minute: 28, second: 28), insulin2.timestamp)
- }
- func testCalBGForPHWithHighBG() throws {
- let pumpModel = PumpModel.model754
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "7b0640c0100b10200e007b0740c0130b102610007b0840de140b102915007b0040c0000c1000100007000001576b900000006e6b90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010c10020c007b0240c0040c10080d007b0340c0060c100c10007b0440c00a0c10140b007b0540c00c0c10180a007b0640c0100c10200e007b0740c0130c102610007b0840de140c102915007b0040c0000d1000100007000001576c900000006e6c90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010d10020c007b0240c0040d10080d007b0340c0060d100c10007b0440c00a0d10140b007b0540c00c0d10180a007b0640c0100d10200e007b0740c0130d102610007b0840de140d102915007b0040c0000e1000100007000001576d900000006e6d90050000000000000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010e10020c007b0240c0040e10080d007b0340c0060e100c10007b0440c00a0e10140b007b0540c00c0e10180a007b0640c0100e10200e007b0740c0130e102610007b0840de140e102915000ad271c7376e103f1a71c7576e10c527ad7b0040c0000f1000100007000001576e900000006e6e900500d2d2d201000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0010f10020c007b0240c0040f10080d007b0340c0060f100c10007b0440c00a0f10140b007b0540c00c0f10180a007b0640c0100f10200e007b0740c0130f102610007b0840de140f102915000a9a45c7366f103f1345c7566f10c527ad7b0040c000101000100007000001576f900000006e6f9005009a9a9a01000001570157640000000000000000000000000000000000000000000000000000000000000000000000007b0140c0011010020c007b0240c0041010080d007b0340c00610100c10007b0440c00a1010140b007b0540c00c1010180a0083014dd20d101040016fd20d10102c016f1266f20d10100a5077f22d101040004ef60d1010c8020a5878d5af10107b0640c0101010200e000a5857ca301010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3af")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(67, events.count)
- let cal = events[64] as! CalBGForPHPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 16, hour: 15, minute: 21, second: 56), cal.timestamp)
- XCTAssertEqual(600, cal.amount)
-
- let cal2 = events[66] as! CalBGForPHPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 16, hour: 16, minute: 10, second: 23), cal2.timestamp)
- XCTAssertEqual(88, cal2.amount)
- }
- func testAlarmSensorDate() throws {
- let pumpModel = PumpModel.model754
- let page = try HistoryPage(pageData: Data(hexadecimalString: "5c118c1f04345b043c830478f104b4c314010040004000c00073e4530f100b730054c254af100b730068d554af100b730059e054af106f125deb140f10400040ec140f1005026f2148ec140f105b0066e7150f10239000be3c370000480000000048375c11407c048c9a0434d6043cfe04786c14010064006400480066e7550f100b720052cb56af100b65b44bd056af107b0440c0170f102e32000ae752c8376f103f1c52c8f76f10ce26925b8074c8170f10009000be3c373000000000480000375c14645d0440d5048cf304342f143c571478c5145b8041c9170f10009000be3c373000000000480000375c14645e0440d6048cf4043430143c581478c61401000c000c00480041c9570f105b804ed3170f102f9000be3c3730006000004c0060375c170c0e0464680440e0048cfe04343a143c621478d01434204ed3170f900100600060004c004ed3570f107b0040c000101000280007000008726f900000006e6f900600d199f30300000872046e3404043001430208001800f000f40602020300b63b270216330507000004090100000000000b65d74bd040b0100b65094bd042b09021004ad9021010030000003451da2210107b0067db021010002800030008000849db0210100a0759dc2270903f2059dce27010ce26925b9263dc021010009000c83c373c0000000010002c375c1160c1040ccb04642514409d148cbb1401003c003c00100063dc42101033736dd60310100816306dd60310100b730052df45b0100b730068c147b0100b664a54c747b010330062c707101008160062c70710107b0262c70710100d32000b664964d147b01040005de20710100c010b66454be447b0100b664154ef47b0100a4673f72770103f0873f7c77010ce2692400042f907101008010b664464f947b0100b730064d149b0105b006cf6091010379000be3c320000700000000070325c053cc11401007000700000006cf64910100b720052cb4ab0100b65b754ea4ab010337470c60b101008163070c60b1010010028002800540078c64b10100b73004ad04eb0100b730053db4eb0100b730063e54eb0100b73004eee4eb0100b6b004fda4fb0100b68004ae44fb0100a9e77e42f70103f1377e4cf7010ce24cd0b730053c252b0100b730051cb52b0100b730067d552b0100b730058e052b010330070e412101008160070e41210107b0370e41210101e32000b664d63e552b0100b664a4eee52b0100b66454af852b01001005000500000005dfa5310100b72004ec654b0100b65ca72d554b0100b65e767d556b0107b0440c01710102e32006f1265da17101040006ada17101005020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b15f")!, pumpModel: pumpModel)
- let events = page.events
- XCTAssertEqual(82, events.count)
- let alarm = events[1] as! AlarmSensorPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2016, month: 7, day: 15, hour: 20, minute: 2, second: 20), alarm.timestamp)
- }
- func testPumpAlarms() throws {
- let pumpModel = PumpModel.model723
- let page = try HistoryPage(pageData: Data(hexadecimalString: "5c0800b8c11ce0c101013c013c00000059eb567a1033004bf5165a100016014bf5165a10330079cc175a1000160179cc175a10330079e0175a1000160179e0175a10330b70ef175a1000160170ef175a10061503680040600107060a2084004060010706110411114040a1070c150a4600010706050309004040a1071a0005410001070c0505410001071a0119410001076400304100010764001e4200010717003542000107180040c0001b10070000000001870000006e01870500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021004fc0001b10030000000056c1201b107b0079c1001b1000440033006cc7005b100016016cc7005b10330068dc005b1000160168dc005b10338568e1005b1000160168e1005b1033c56aeb005b100016016aeb005b1033b168f0005b1000160168f0005b1033b968f5005b1000160168f5005b1033be68fa005b1000160168fa005b1033bc69c3015b1000160169c3015b1033c169c8015b1000160169c8015b1033b868cd015b1000160168cd015b1033ae69d2015b1000160169d2015b1033ad69d7015b1000160169d7015b1033c368dc015b1000160168dc015b1033c868e1015b1000160168e1015b1033c169e6015b1000160169e6015b1033b668eb015b1000160168eb015b1033be68f0015b1000160168f0015b1033a468f5015b1000160168f5015b1033ab68fa015b1000160168fa015b1033a869c3025b1000160169c3025b10338968c8025b1000160168c8025b10336c68cd025b1000160168cd025b10336469d2025b1000160169d2025b10336d68d7025b1000160168d7025b10337a68dc025b1000160168dc025b10338968e1025b1000160168e1025b10339968e6025b1000160168e6025b10339268eb025b1000160168eb025b10338168f0025b1000160168f0025b10338369f5025b1000160169f5025b10337768fa025b1000160168fa025b10337668c3035b1000160168c3035b10338068c8035b1000160168c8035b10336768cd035b1000160168cd035b10330069d2035b1000160069d2035b107b0069d2031b10004400336968d7035b1000160168d7035b10338668dc035b1000160168dc035b10337b6ae1035b100016016ae1035b10338668e6035b1000160168e6035b10339668eb035b1000160168eb035b1033c069f0035b1000160169f0035b1033b769f5035b1000160169f5035b10339c69fa035b1000160169fa035b10330068c3045b1000160068c3045b107b0068c3041b10004400338368d2045b1000160168d2045b1033ac68d7045b1000160168d7045b10338769dc045b1000160169dc045b10335f68e1045b1000160168e1045b10330069e6045b1000160069e6045b100000000000bf1d")!, pumpModel: pumpModel)
- let events = page.events
- XCTAssertEqual(126, events.count)
- let alarm = events[9] as! PumpAlarmPumpEvent
- XCTAssertEqual("deviceResetBatteryIssue21", "\(alarm.alarmType)")
- XCTAssertEqual(DateComponents(gregorianYear: 2007, month: 1, day: 1, hour: 0, minute: 0, second: 0), alarm.timestamp)
- let batteryDepletedAlarm = events[13] as! PumpAlarmPumpEvent
- XCTAssertEqual("batteryDepleted", "\(batteryDepletedAlarm.alarmType)")
- XCTAssertEqual(DateComponents(gregorianYear: 2007, month: 1, day: 1, hour: 0, minute: 0, second: 0), batteryDepletedAlarm.timestamp)
- }
- func testPageWithDuplicates() throws {
- let pumpModel = PumpModel.model754
- let page = try HistoryPage(pageData: Data(hexadecimalString: "1601874b15561033c0a250155610001601a25015561033bb9055155610001601905515561033b6b75a155610001601b75a15561033a9ad60155610001601ad6015561033a3a265155610001601a26515561033a0a76a155610001601a76a15561033a18b6f1556100016018b6f1556100b7200a17255b61033a38673155610001601867315561033a5957b155610001601957b1556100b65bc9d4056b61033a28441165610001601844116561033a4ab46165610001601ab461656103394964c165610001601964c16561033879b511656100016019b511656103378a756165610001601a75616561033688c5b1656100016018c5b1656103342846516561000160184651656103322b269165610001601b2691656103313af6e165610001601af6e165610332087741656100016018774165610331a8d791656100016018d791656103300a142175610001601a1421756103300a75a175610001601a75a17561033028760175610001601876017561033098c651756100016018c651756103307a16a175610001601a16a1756103305876f175610001601876f1756103314907317561000160190731756103300807917561000160080791756107b0380791716101c30007b008040001710002e0007000007f396900000006e969006007e679502000007f3061a4d01d917000000000000000001d90000000500900d5700141f030b000000020100000000003348b640005710001601b6400057103349a446005710001601a4460057103343834c005710001601834c005710331d8951005710001601895100571033469e560057100016019e56005710335b835b005710001601835b0057103351ba5e005710001601ba5e0057103358816400571000160181640057103360b768005710001601b768005710334aa56e005710001601a56e0057103343837400571000160183740057103344887900571000160188790057103337a042015710001601a04201571033388d4b0157100016018d4b015710333e8f500157100016018f500157103344b754015710001601b7540157103342a55a015710001601a55a0157103334836001571000160183600157103339896501571000160189650157103336a06a015710001601a06a0157103331836f015710001601836f0157103335ba72015710001601ba7201571033348e780157100016018e780157103300b740025710001600b7400257107b00b740021710002e003330a546025710001601a546025710332f844c025710001601844c025710332b8a510257100016018a51025710332b8a510257100016018a510257107b008b6f021710002e000b7300b64143b7103317824703571000160182470357107b008365031710002e000b6900804344b7107b0180400517100a3000000000000000ff92")!, pumpModel: pumpModel)
- let events = page.events
- XCTAssertEqual(events[116].rawData, events[118].rawData)
- XCTAssertEqual(events[117].rawData, events[119].rawData)
- }
- func testSaveSettings() throws {
- let pumpModel = PumpModel.model723
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "7b01a91a061510042a0033adb62e065510001601b62e0655103360b633065510001601b6330655103300a838065510001600a8380655107b01a838061510042a00335fa80b085510001601a80b0855103300a422085510001600a4220855107b02a422081510113000336eab33085510001601ab330855103383a838085510001601a838085510337baa38085510001601aa38085510337aa801095510001601a801095510337ca806095510001601a8060955103382a80b095510001601a80b095510337ca810095510001601a810095510337caa10095510001601aa100955103378a815095510001601a8150955103380a81a095510001601a81a095510336caa24095510001601aa240955103300ac29095510001600ac290955107b02ac290915101130003366a833095510001601a8330955103300a938095510001600a9380955107b02a93809151011300033679f2e0a55100016019f2e0a55103373aa330a5510001601aa330a5510338bab380a5510001601ab380a55103383a40b0b5510001601a40b0b55103300a3100b5510001600a3100b55107b02a3100b15101130000100f000f0000000b0214b55103377ab290b5510001601ab290b551033b8a12e0b5510001601a12e0b551033baac330b5510001601ac330b55103376a8380b5510001601a8380b55103300a6010c5510001600a6010c55107b02a6010c1510113000010056005600df00ba094c5510339ba10b0c5510001601a10b0c55103300ae100c5510001600ae100c55107b02ae100c15101130003300ab2e0c5510001601ab2e0c55103300ab060d5510001600ab060d55107b02ab060d15101130002601a62f0d151027000000000000280000000000002601ae2f0d15102701b207000000280000000000005d009f300d1510140084312d15107b0084312d1510003200140197310d15107b0297310d1510113000338caa060e5510001601aa060e5510338da5180e5510001601a5180e55103384b82e0e5510001601b82e0e55103384ba2e0e5510001601ba2e0e551001003c003c003400942f4e55103300ab340e5510001600ab340e55107b03ab340e15101d3400337cab1f0f5510001601ab1f0f5510339aac240f5510001601ac240f551033b1ab290f5510001601ab290f551033b7ac2e0f5510001601ac2e0f551033bbab330f5510001601ab330f55103394ae380f5510001601ae380f5510337bac01105510001601ac011055103300ac0b105510001600ac0b1055107b03ac0b1015101d34003300ad1f105510001601ad1f1055103300ad24105510001600ad241055107b03ad241015101d34000100e600e6001b00a82e5055103379ad33105510001601ad331055103392ad38105510001601ad3810551033a5aa01115510001601aa01115510000004dd")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(125, events.count)
-
- let saveSettings = events[79] as! PlaceholderPumpEvent
- let json = saveSettings.dictionaryRepresentation
- let displayedType = json["_type"] as! String
- XCTAssertEqual("saveSettings", displayedType)
- }
-
- func testBolusReminder() throws {
- let pumpModel = PumpModel.model723
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "6e8d900500000000000000074e07266200280200000000000000000028000000010000000000000000000000000000000000000034c88048030e101a009046060e10060303689046660e100c0317400001076400184000010764002040000107170025400001071800004000010707000001708e900000006e8e90050000000000000001700170640000000000000000000000000000000000000000000000000000000000000000000000007b000040000107003c003464006803010721000c6d030107030000001a386d2301077b002270030107003c00690700400b01072b00690c00400e01072e006911004014010734001a00185e15010706030368185e7501070c030e4000010764001b4000010717001c40000107180000400001077b000040000107003c006400034100010717001d4100010718008055011710070000050a01870000006e01870500000000000000050a050a64000000000000000000000000000000000000000000000000000000000000000000000000630197560117100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000863e")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(32, events.count)
-
- let event1 = events[16] as! BolusReminderPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2007, month: 1, day: 1, hour: 11, minute: 0, second: 0), event1.timestamp)
- let event2 = events[17] as! BolusReminderPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2007, month: 1, day: 1, hour: 14, minute: 0, second: 0), event2.timestamp)
-
- let event3 = events[18] as! BolusReminderPumpEvent
- XCTAssertEqual(DateComponents(gregorianYear: 2007, month: 1, day: 1, hour: 20, minute: 0, second: 0), event3.timestamp)
- }
-
- func testHighBitsOfTempBasalRate() throws {
- let pumpModel = PumpModel.model522
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "0615050d0040600105062f1873004020c105062f0c5b004020c105062f0c6c004020c105062f0c7d004020c105062f0c8e004020c105062f0c9f004020c105062f0cc3004020c105062f0cd4004020c10506110ce3004020c105061504e9004040a1050c1516400001056400194300010517001d430001051800004300010521000343000105030000001208432001052c501852a0010524e530530001051a000d570201050603050d0d576201050c030c4000010564000d40000105170022400001051800804a021710070000003601856d0185050c00e8000000000036003664000000000000000000000000000000000000000000000c00e8000000070000025097906d9790050c00e8000000000250025064000000000000000000000000000000000000000000000c00e800000060019d600018106001a0600018106001a2610018103102b6570118105b00b6570118100150082178000100000000017801010100b657211810010a0a00ba5c2118105e01ab5d0118103102865e01181035008040021810010a0a0f865e6118103375a5650c1810081601a5650c18103300b4650c1810081600b4650c18106200b8650c1810333485660c181000160185660c18105b00b36e0e1810025008217800020000000002785c1402671402851402991402ad1402c11402df143200907a0e18106101907a0e18106a00b07a0e18106100b07a0e1810324f8c400f181061018c400f1810350080422f18101e00af450f181001030104b36e6e18101f00ba450f18103102936d1418105b00936d141810065008217800070000000007785c0502661401070700936d541810010d0d008d495518103500804f151810011b1b0098435618103300827b165810001601827b1658106a4fb8611718106100b861171810334a856317181005160185631718103300b36a171810001600b36a1718103390986b171810011601986b1718103300a66d171810001600a66d17181033c8b76d171810001601b76d1718103300b173171810001600b17317181033908174171810011601817417181033008974171810001600897417181033209a741718100316019a741718103300a674171810001600a6741718103350ae74171810051601ae74171810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f7")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(90, events.count)
-
- let event1 = events[88] as! TempBasalPumpEvent
- XCTAssertEqual(34.0, event1.rate)
-
- let event2 = events[84] as! TempBasalPumpEvent
- XCTAssertEqual(20.0, event2.rate)
-
- let event3 = events[80] as! TempBasalPumpEvent
- XCTAssertEqual(10.0, event3.rate)
- let event4 = events[76] as! TempBasalPumpEvent
- XCTAssertEqual(5, event4.rate)
- }
- func testChangeSensorAlarmSilenceConfig() throws {
- let pumpModel = PumpModel.model723
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "3350919f155610001601919f1556100b65de82a835b6100ae195aa3516105be199aa151610005000501e63a800000000240084635c08a0bf0464c90401008c008c0024009aaa5516103300a8ae155610001601a8ae1556107b06a890161610242a000b65d184a936b6100adf82ad3676103f1b82adf67610aa8c035bdf8cad161610005000501963c400000000700054635c0b8c4004a0fe0464081433509ead1656100016019ead1656100100640064007000a1ad56561033008eb41656100016018eb416561033009d821756100016009d821756107b069d82171610242a005301ae86171610f0334ab587175610001601b58717561033009b8a1756100016019b8a1756103314bb8e175610001601bb8e1756103348b495175610001601b495175610334f9f991756100016019f991756103300979e175610001600979e1756107b06979e171610242a000b65d182a837b6100b580083a837b610331ab5ae175610001601b5ae17561033009ab21756100016009ab21756107b069ab2171610242a00334abbb6175610001601bbb617561007000008f6b6100000006eb61005009230df09000008f6047e320478320037007c008c00c802a801010104008f105301f2280103e1e101040000000000003350ae81005710001601ae810057103350b69a005710001601b69a0057100b65c884a920b710335092b200571000160192b20057103350948a015710001601948a015710334f9a990157100016019a990157103350929e015710001601929e015710335094b201571000160194b2015710334b998502571000160199850257103350918a025710001601918a025710334faf9b025710001601af9b0257103340949e025710001601949e0257103345b5a2025710001601b5a2025710333baea9025710001601aea9025710331a9aad0257100016019aad025710331792b202571000160192b2025710330096b802571000160096b80257107b0196b8021710022c00330cab80035710001601ab8003571033009c860357100016019c86035710330ab394035710001601b39403571033009a990357100016009a990357107b019a99031710022c00333eaea8035710001601aea8035710334899ae03571000160199ae035710335094b203571000160194b203571033469a850457100016019a850457103300938a045710001600938a0457107b02938a041710083200334497900457100016019790045710334b9f940457100016019f940457103342939f045710001601939f0457103300b5a2045710001600b5a20457107b02b5a204171008320033009bad0457100016019bad045710330396b804571000160196b8045710330bac80055710001601ac800557103312938705571000160193870557103300948a05571000000000000000ff37")!, pumpModel: pumpModel)
- let events = page.events
-
- XCTAssertEqual(118, events.count)
-
- XCTAssert(events[21] is ChangeSensorAlarmSilenceConfigPumpEvent)
- }
- func testUnknownEventType68() throws {
- // Veo 754 2.6a
- // Thanks to @Mandelkern73 for discovering!
- let pumpModel = PumpModel.model754
- let hexadecimalString = "090079614a98123f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0a79610a1812141c00610079610a9812321279610a9812660079610a9812670079610a9812001e3c0179610a98123dc225450000003e000000000000260179610a98122705b7a100000028000000000000600079610a5812230079610a98125e0179610a98122d0179610a98125a0a79610a9812050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089180000640400530c004b10005c1600781a008c20006422004b0000001f041a0c17101c16241a2a201f221700323e0000000000000000000000000000000000000000003f620079610a98125f2979610a9812520079610a9812510279610a9812551179610a9812000f0f00ffff00ffff00ffff00ffff00ffff00ffff00ffff00001400ffff00ffff00ffff00ffff00ffff00ffff00ffff560079614a9812dcdc002828500079610a981220011e003c14001e3cffffffb44600003c41011e00781e001e3c23efa7642780801f54fc79614a9812fffcff00f05000ffff00ffff00ffff00ffff00ffff00ffff00fffffcfffcff00642c00ffff00ffff00ffff00ffff00ffff00ffff00ffff44017c0179610a9812260172620a18122705b7a10000002800000000000044007b650a181244015d660a181250005f660a181241011e00781e001e3cffffff642780801f41011e00781e001e3c23efa7642780801f5d005e670a18120b68006c6a4ab8120a464a6b4a18127b0b40400b1812161c0017004a4e0b581218005d4e0b5812810141530b181200a21c85687d0141530b181200a21c8568000000000000000000000000000000000000000000000000007b0c40400c1812181800170042630c5812180041630c58127d015b630c181200a21c8568000000000000000000000000000000000000000000000000007b0d40400d18121a18000b70004b614db8120b71004a6f4db8127b0e40400e18121c18007b0f40400f18121e20000b70005c664fb8127b104040101812202c007b1140401118122230000b70005d7951b8127b1240401218122430007b1340401318122630001e01624e1358121f2058541358127b1358541318122630007b144040141812282c000b7000595754b8123300516014181200160151601418123300546714181200160054671418120000004b1c"
- let data = Data(hexadecimalString: hexadecimalString)
- let page = try HistoryPage(pageData: data!, pumpModel: pumpModel)
- let events = page.events
- for event in events {
- if let event = event as? TimestampedPumpEvent {
- print(event.timestamp, event.dictionaryRepresentation)
- } else {
- print(event.dictionaryRepresentation)
- }
- }
- XCTAssertEqual(58, events.count)
- XCTAssert(events[23] is PlaceholderPumpEvent)
- XCTAssert(events[23].rawData[0] == PumpEventType.changeSensorAutoCalEnable.rawValue)
- }
-
- func testMeterBGx15() throws {
- let pumpModel = PumpModel.model515
-
- let page = try HistoryPage(pageData: Data(hexadecimalString: "1601971f174a12333b9621174a120016019621174a1233429925174a120016019925174a1233479f2a174a120016019f2a174a123343a12f174a12001601a12f174a1233419c35174a120016019c35174a123337ab39174a12001601ab39174a1207000004fc8a126c8a12090c00e80000000004fc031e3f01de25000001de2500000000000001de6408000000083334b802004b12001601b802004b123330b507004b12001601b507004b123337b90c004b12001601b90c004b1233348312004b120016018312004b1233308717004b120016018717004b12332f8b1c004b120016018b1c004b121700b32f004b121800b32f004b121e00b635000b121f008036000b1233008c36000b120016008c36000b122600a706010b12270f1206000000280000000000002601aa06010b12270f1206000000280000000000002601af06010b1227000000000000280000000000002601b806010b12270f423f000000280000000000001a01a40b010b121700b921014b121800ba21014b12010101009923414b121700a217024b121800a117024b12010101008219424b1217009a1e034b1218009a1e034b12010303008520434b12333c9425034b120016019425034b12333c9725034b120016019725034b12333c9925034b120016019925034b12333c9d25034b120016019d25034b12333ca025034b12001601a025034b1201010100841b474b123300af1b074b12001601af1b074b123300b42f074b12001601b42f074b12390bb134876b128436633300a401084b12001600a401084b1236008613080b12370be5940cdf8f3800000000000017008723084b1218008823084b121700b531094b121800b531094b1217008f38094b1218008f38094b123601ad38090b12370be5940cdf8f380000000000002000bb3a090b12011e1e00ac114a0b12010f0f0097234a4b121700a0250b4b121800a0250b4b120114130091244b0b120114140091244b0b1262008f2f0b0b126401a62f0b0b12260196300b0b12270f423f0000002800000000000026019b300b0b1227000000000000280000000000001700b9330b4b121800ba330b4b12010a0a0090194c0b12012828008d184d0b121700a5220d4b121800a5220d4b126401b82b0d0b126400822c0d0b1217008c2c0d0b121800802d0d0c12070000039a8b126c8b1209005c5c5c010000039a01b63001e434000001e43400000000000001e46409000000096201a32f0d0c126200a62f0d0c12170084310d4c12180091300d4b1207000000048c126c8c12090c00e80000000000040004640000000000000000000000000000000000000000000064018e060e0b1236009a060e0b12370be5940cdf8f380000000000002601b3060e0b12270f1206000000280000000000001a0093150e0b120000007689")!, pumpModel: pumpModel)
-
- let events = page.events
-
- XCTAssertEqual(106, events.count)
-
- XCTAssert(events[62] is BGReceivedPumpEvent)
-
- let bgMeter = events[62] as! BGReceivedPumpEvent
-
- XCTAssertEqual(bgMeter.amount, 92)
- XCTAssertEqual(bgMeter.meter, "843663")
- XCTAssertEqual(bgMeter.timestamp, DateComponents(gregorianYear: 2018, month: 8, day: 11, hour: 7, minute: 52, second: 49))
- }
-
- func testHistoryTimeShift() throws {
- let model = PumpModel.model523
- let pages = [
- "16004ee2124d127b044fe2120d121d240033004ee7124d120016014ee7124d1233004eec124d120016004eec124d127b044eec120d121d240033004ef1124d120016014ef1124d1233004ec9134d120016014ec9134d1233004ece134d120016004ece134d127b044ece130d121d2400338d4edd134d120016014edd134d1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc9d",
- "7b014fec040d12062800334c5ff1054d120016015ff1054d1233004ff6054d120016004ff6054d127b014ff6050d1206280001008a008a00000055d1264d1233004fe2064d120016014fe2064d1233004ff6064d120016004ff6064d127b014ff6060d1206280033514ffb064d120016014ffb064d1233004fc4074d120016004fc4074d127b024fc4070d120e240001004a004a006f0077cd274d12336e5ed3074d120016015ed3074d12334e5dd8074d120016015dd8074d1233004fdd074d120016004fdd074d127b024fdd070d120e2400330050fb074d1200160150fb074d1233004fd3084d120016014fd3084d1233004fd8084d120016004fd8084d127b024fd8080d120e240033ba4eec084d120016014eec084d1233ba4fc4094d120016014fc4094d1201007800780030004cd6294d1233004fdd094d120016004fdd094d127b024fdd090d120e240033004ff1094d120016014ff1094d1233004fc90a4d120016014fc90a4d1233004fdd0a4d120016014fdd0a4d1233005bf10a4d120016015bf10a4d1233004fc90b4d120016014fc90b4d1233004fdd0b4d120016014fdd0b4d1233004fec0b4d120016004fec0b4d127b034fec0b0d121720000100660066001d0060c12c4d12336151c90c4d1200160151c90c4d12335c4ece0c4d120016014ece0c4d12334f4fd30c4d120016014fd30c4d1233554ed80c4d120016014ed80c4d12335b4edd0c4d120016014edd0c4d1233004ee20c4d120016004ee20c4d127b034fe20c0d1217200033004ffb0d4d120016014ffb0d4d1233004fd30e4d120016014fd30e4d1233004fd80e4d120016004fd80e4d127b034fd80e0d121720007b0440de0e0d121d240033004fe20e4d120016014fe20e4d12330050e70e4d1200160050e70e4d127b0450e70e0d121d240033594edd0f4d120016014edd0f4d1233464fe20f4d120016014fe20f4d12336c4fe70f4d120016014fe70f4d1233804eec0f4d120016014eec0f4d1233764ff10f4d120016014ff10f4d1233644ff60f4d120016014ff60f4d1233575ffb0f4d120016015ffb0f4d12334b65c4104d1200160165c4104d1233004fc9104d120016004fc9104d127b044fc9100d121d240033004fce104d120016014fce104d1233004fe2104d120016014fe2104d1233004fec104d120016004fec104d127b044fec100d121d240033004ffb104d120016014ffb104d12330050d3114d1200160150d3114d1233004fe2114d120016004fe2114d127b044fe2110d121d240033634ec9124d120016014ec9124d12010078007800000060c9324d1233ba4ece124d120016014ece124d1233b24ed3124d120016014ed3124d1233914ed8124d120016014ed8124d1233774edd124d120016014edd124d1233004ee2124d120000000000362c",
- "16014ee2144c1233644fe7144c120016014fe7144c1233634fec144c120016014fec144c12335a4ff1144c120016014ff1144c1233004ef6144c120016004ef6144c127b044ef6140c121d24007b0540c0150c122a300033684ece154c120016014ece154c12336f4ed3154c120016014ed3154c1233605fd8154c120016015fd8154c1233004fdd154c120016004fdd154c127b054fdd150c122a3000334a4fe2154c120016014fe2154c12334b4fe7154c120016014fe7154c12330044f2154c1200160144f2154c12334a4ec4164c120016014ec4164c1233555fc9164c120016015fc9164c121e0171d0160c127b0574ee160c122a30001f2074ee160c12336d4ef1164c120016014ef1164c1233004ef6164c120016004ef6164c127b054ff6160c122a3000334a4ec9174c120016014ec9174c1233564fce174c120016014fce174c1233674fd8174c120016014fd8174c12334d4edd174c120016014edd174c1233554fe2174c120016014fe2174c1233004ee7174c120016004ee7174c127b054fe7170c122a3000334a4ef6174c120016014ef6174c1233474efb174c120016014efb174c1207000007a26c920000006e6c92050000000000000007a204d63f02cc25000000000000000002cc0000000700000000000000000000000000000000000000334c4ec4004d120016014ec4004d1233774ec9004d120016014ec9004d1233894ece004d120016014ece004d12338a4ed3004d120016014ed3004d1233a54ed8004d120016014ed8004d1233ba4edd004d120016014edd004d1233b84eec004d120016014eec004d1233ba4ef1004d120016014ef1004d1233914ef6004d120016014ef6004d1233714efb004d120016014efb004d1233654fc4014d120016014fc4014d12335c4ec9014d120016014ec9014d1233624ece014d120016014ece014d1233664ed3014d120016014ed3014d1233584ed8014d120016014ed8014d1233474edd014d120016014edd014d1233004ee2014d120016004ee2014d127b004fe2010d1200300033074ef6014d120016014ef6014d1233004efb014d120016014efb014d1233004ed3024d120016014ed3024d1233007aea024d120016017aea024d1233004efb024d120016004efb024d127b004efb020d120030007b0140c0030d1206280033584ed8034d120016014ed8034d12336e4edd034d120016014edd034d12337e4fe2034d120016014fe2034d1233604ee7034d120016014ee7034d1233004eec034d120016004eec034d127b014fec030d1206280033534efb034d120016014efb034d1233004fc4044d120016004fc4044d127b014fc4040d1206280033004ed3044d120016014ed3044d1233005ee7044d120016015ee7044d1233004eec044d120016004eec044d1200000000ec9a",
- "335762fb0b4c1200160162fb0b4c12336460c40c4c1200160160c40c4c12336960c90c4c1200160160c90c4c12335663ce0c4c1200160163ce0c4c12334661d30c4c1200160161d30c4c12334960d80c4c1200160160d80c4c12335561e20c4c1200160161e20c4c1233005ee70c4c120016005ee70c4c127b035ee70c0c1217200001006c006c00000061f82c4c12330079dd0d4c1200160179dd0d4c1233005df10d4c120016015df10d4c1233005dc90e4c120016015dc90e4c1233005fd80e4c120016005fd80e4c127b035fd80e0c121720007b0440de0e0c121d240033676dec0e4c120016016dec0e4c1233006ef10e4c120016006ef10e4c127b046ef10e0c121d2400335f4ff60e4c120016014ff60e4c1233564efb0e4c120016014efb0e4c1233524fc40f4c120016014fc40f4c12010068006800290064c42f4c12334b4fce0f4c120016014fce0f4c1233005ed30f4c120016005ed30f4c127b045fd30f0c121d2400333e50f60f4c1200160150f60f4c1233005ffb0f4c120016005ffb0f4c127b045ffb0f0c121d2400333660cb104c1200160160cb104c1233374fce104c120016014fce104c1233004fd3104c120016004fd3104c127b044fd3100c121d2400333a4fd8104c120016014fd8104c1233484fdd104c120016014fdd104c1233004ee2104c120016004ee2104c127b044fe2100c121d2400333c4efb104c120016014efb104c12333a4fc4114c120016014fc4114c1233004ec9114c120016004ec9114c127b044ec9110c121d240033374ed3114c120016014ed3114c12333b4ed8114c120016014ed8114c12333e50dd114c1200160150dd114c1233004fe2114c120016004fe2114c127b044fe2110c121d240033054fe7114c120016014fe7114c12330e4fec114c120016014fec114c1233074ff1114c120016014ff1114c12010020002000160063f2314c1233a24ff6114c120016014ff6114c1233994ffb114c120016014ffb114c12338e4ec4124c120016014ec4124c12337c49d4124c1200160149d4124c1201004a004a002a0069d6324c1233874ed8124c120016014ed8124c12337a50e2124c1200160150e2124c12335050e7124c1200160150e7124c1233384fec124c120016014fec124c1233004ef1124c120016014ef1124c1233004ece134c120016014ece134c1233004ed9134c120016014ed9134c12330060d9134c1200160160d9134c1233004ee7134c120016004ee7134c127b044fe7130c121d240001008c008c0041004eee334c1233ba4ff1134c120016014ff1134c1233b54ec9144c120016014ec9144c12339b4ece144c120016014ece144c1233954ed3144c120016014ed3144c1201006e006e00a9005dd6344c1233ba4fdd144c120016014fdd144c1233894ee2144c12000049f0",
- "07000007456b920000006e6b920500000000000000074504d943026c210000000000000000026c000000070000000000000000000000000000000000000033496aec004c120016016aec004c12334a5cf1004c120016015cf1004c12334e5cf6004c120016015cf6004c1233535cfb004c120016015cfb004c1233565cc4014c120016015cc4014c1233555cc9014c120016015cc9014c12334d5dce014c120016015dce014c1233005dd3014c120016005dd3014c127b005dd3010c1200300033005ce7014c120016015ce7014c1233005dfb014c120016015dfb014c1233005cc4024c120016005cc4024c127b005cc4020c120030007b0140c0030c1206280033694fd8034c120016014fd8034c1233614edd034c120016014edd034c12334e4ee2034c120016014ee2034c1233004fe7034c120016004fe7034c127b014fe7030c1206280033004ef1034c120016014ef1034c1233004ef6034c120016004ef6034c127b014ff6030c1206280033004ec4044c120016014ec4044c1233004ed8044c120016014ed8044c1233004fdd044c120016004fdd044c127b014fdd040c1206280033004ee7044c120016014ee7044c1233004ef1044c120016004ef1044c127b014ef1040c1206280033004ec4054c120016014ec4054c1233004ed8054c120016004ed8054c127b014ed8050c12062800010094009400000058c9264c12339b4fec064c120016014fec064c12338d4ff1064c120016014ff1064c12337d4ff6064c120016014ff6064c1233744ffb064c120016014ffb064c1233634ec4074c120016014ec4074c1233524fc9074c120016014fc9074c1233004fce074c120016004fce074c127b024fce070c120e240033574ed8074c120016014ed8074c1233004fdd074c120016004fdd074c127b024fdd070c120e240033494ee2074c120016014ee2074c1233004fe7074c120016004fe7074c127b024fe7070c120e2400330050ce084c1200160150ce084c1233004fd8084c120016004fd8084c127b0250d8080c120e2400337960e7094c1200160160e7094c12337171ec094c1200160171ec094c12336c6ef1094c120016016ef1094c12336f6df6094c120016016df6094c1233656efb094c120016016efb094c12335d5ec40a4c120016015ec40a4c12336e6dc90a4c120016016dc90a4c12336f73ce0a4c1200160173ce0a4c12336761d80a4c1200160161d80a4c12334c5ddd0a4c120016015ddd0a4c1233005ce20a4c120016005ce20a4c127b025de20a0c120e240033005dec0a4c120016015dec0a4c12330062c40b4c1200160162c40b4c1233005dd30b4c120016005dd30b4c127b025dd30b0c120e24007b0340de0b0c1217200033635ff10b4c120016015ff10b4c1233625ff60b4c120016015ff60b4c120000b78f",
- "330b4fd2114b120016014fd2114b1233004fd7114b120016014fd7114b12331250e1114b1200160150e1114b12330050e6114b1200160050e6114b127b0450e6110b121d240033374ff5114b120016014ff5114b1233004efa114b120016004efa114b127b044ffa110b121d2400333f4fc8124b120016014fc8124b1233004fcd124b120016004fcd124b127b044fcd120b121d2400010052005200000076cf324b12333b4fd2124b120016014fd2124b12336d49d9124b1200160149d9124b12335e4edc124b120016014edc124b12010038003800500046dd324b12335a4fe1124b120016014fe1124b1233554ee6124b120016014ee6124b1233004feb124b120016014feb124b12190040c2130b1233004fc3134b120016014fc3134b1233004fc8134b120016014fc8134b1233004fcd134b120016014fcd134b121a005bd9130b121a0176d9130b12346776d9130b12330051dd134b1200160151dd134b1233005ce7134b120016005ce7134b127b045de7130b121d240033594ef1134b120016014ef1134b12346468f4130b12210050f5130b12030000004540f6330b12030014001464f7130b12334a5cfb134b120016015cfb134b1233505cc4144b120016015cc4144b1233005cc9144b120016005cc9144b127b045cc9140b121d2400335a5cce144b120016015cce144b1233005dd3144b120016005dd3144b127b045dd3140b121d240033555cd8144b120016015cd8144b1201007c007c00330065de344b1233565de2144b120016015de2144b1233005de7144b120016005de7144b127b045de7140b121d2400330c5cec144b120016015cec144b1233005df1144b120016015df1144b1233015dc4154b120016015dc4154b1233005cc9154b120016015cc9154b1233005cdd154b120016015cdd154b1233005ce2154b120016005ce2154b127b055de2150b122a3000334b54ed154b1200160154ed154b12334d5df1154b120016015df1154b1233005df6154b120016015df6154b1233005cc4164b120016005cc4164b127b055cc4160b122a30001e0176c8160b127b054fe6160b122a30001f204fe6160b1201003c003c00330067e6364b1233765df1164b120016015df1164b12337d5df6164b120016015df6164b12337c61fb164b1200160161fb164b1233735ec4174b120016015ec4174b1233825dc9174b120016015dc9174b12337e5dce174b120016015dce174b12336b5fd3174b120016015fd3174b1233555fd8174b120016015fd8174b1233655ddd174b120016015ddd174b12336d5de2174b120016015de2174b1233585fe7174b120016015fe7174b1233505dec174b120016015dec174b1233005df1174b120016005df1174b127b055df1170b122a30007b0040c0000c120030000000000000000000004251",
- "337364c2084b1200160164c2084b1233535fc7084b120016015fc7084b1233005ecc084b120016005ecc084b127b025ecc080b120e240033525ec2094b120016015ec2094b12336a5ec7094b120016015ec7094b1233a74fcc094b120016014fcc094b1233ba4fd1094b120016014fd1094b12010078007800140068d4294b1233004fdb094b120016014fdb094b1233004fef094b120016014fef094b12330050c70a4b1200160150c70a4b12330060db0a4b1200160160db0a4b1233004fef0a4b120016014fef0a4b12330060c70b4b1200160160c70b4b12330062d60b4b1200160062d60b4b127b0262d60b0b120e24007b0340de0b0b12172000334a5fe00b4b120016015fe00b4b12335a5fea0b4b120016015fea0b4b1233004fef0b4b120016004fef0b4b127b034fef0b0b1217200033525df90b4b120016015df90b4b12335b5dc20c4b120016015dc20c4b12335d5fc70c4b120016015fc70c4b1233614fcc0c4b120016014fcc0c4b1233974fd10c4b120016014fd10c4b1201002600260015005bd32c4b1233b760d60c4b1200160160d60c4b12339562db0c4b1200160162db0c4b1233704fe00c4b120016014fe00c4b12334c4fe50c4b120016014fe50c4b1233004fea0c4b120016004fea0c4b127b034fea0c0b12172000334a4fef0c4b120016014fef0c4b1233004ff40c4b120016004ff40c4b127b034ff40c0b12172000335d50f90d4b1200160150f90d4b1233855dc20e4b120016015dc20e4b12339f62c70e4b1200160162c70e4b1233944fcc0e4b120016014fcc0e4b12338e4ed10e4b120016014ed10e4b1233944fd60e4b120016014fd60e4b1234c876d90e0b1233974fdc0e4b120016014fdc0e4b1233884fe10e4b120016014fe10e4b12335950e60e4b1200160150e60e4b12334b4feb0e4b120016014feb0e4b1233004ff00e4b120016004ff00e4b127b044ff00e0b121d240033004fc80f4b120016014fc80f4b1233004fdc0f4b120016004fdc0f4b127b044fdc0f0b121d240033434fe60f4b120016014fe60f4b12334f4feb0f4b120016014feb0f4b12335c4ff00f4b120016014ff00f4b1233004ff50f4b120016004ff50f4b127b044ff50f0b121d240033494fc8104b120016014fc8104b12334e4fcd104b120016014fcd104b1233704ed2104b120016014ed2104b12337d4fd7104b120016014fd7104b1233794fdc104b120016014fdc104b1233614fe1104b120016014fe1104b12335f4fe6104b120016014fe6104b12335d4feb104b120016014feb104b1233614ef0104b120016014ef0104b1233524ff5104b120016014ff5104b1233474efa104b120016014efa104b1233004fc3114b120016004fc3114b127b044fc3110b121d2400330e4fcd114b120016014fcd114b120000000029b4",
- "33004eef174a120016004eef174a127b054eef170a122a3000335b4ef9174a120016014ef9174a12070000084c6a920000006e6a920500000000000000084c055a4102f223000000000000000002f2000000090000000000000000000000000000000000000033524fc2004b120016014fc2004b1233584ec7004b120016014ec7004b1233004ecc004b120016004ecc004b127b004ecc000b12003000335a4ed6004b120016014ed6004b12337e4edb004b120016014edb004b1233606ff5004b120016016ff5004b1233004ef9004b120016004ef9004b127b004ef9000b1200300033004ace014b120016014ace014b1233634ed6014b120016014ed6014b1233004edb014b120016004edb014b127b004fdb010b1200300033004ee0014b120016014ee0014b1233004ef4014b120016014ef4014b1233004ec2024b120016004ec2024b127b004ec2020b1200300033624ed6024b120016014ed6024b1233824edb024b120016014edb024b1233874ee0024b120016014ee0024b127b014ec2030b1206280033045cd1034b120016015cd1034b1233005cd6034b120016015cd6034b1233005ce5034b120016005ce5034b127b015ce5030b1206280033005cef034b120016015cef034b1233015cc7044b120016015cc7044b1233005ccc044b120016005ccc044b127b015dcc040b12062800334c5cd1044b120016015cd1044b1233695cd6044b120016015cd6044b1233955cdb044b120016015cdb044b12339b5ce0044b120016015ce0044b12337c5ce5044b120016015ce5044b1233585cea044b120016015cea044b12334e5cef044b120016015cef044b12334e5eef044b120016015eef044b1233005cf4044b120016005cf4044b127b015cf4040b1206280033005cd1054b120016015cd1054b1233065bd9054b120016015bd9054b1233005cdb054b120016005cdb054b127b015ddb050b1206280033005ce0054b120016015ce0054b1233006be5054b120016016be5054b1233005cf9054b120016015cf9054b1233545cc7064b120016015cc7064b12335b5dcc064b120016015dcc064b1201008c008c00000043d1264b1233ba5dd6064b120016015dd6064b12640053df060b1217005bdf060b12180040df090b1217005fe2094b12180078e2064b12337a65e3064b1200160165e3064b12337a79e3064b1200160179e3064b1233005fe5064b120016005fe5064b127b015fe5060b12062800330061f4064b1200160161f4064b1233005ec7074b120016005ec7074b127b025ec7070b120e2400334a5dcc074b120016015dcc074b1233495dd1074b120016015dd1074b1233005dd6074b120016005dd6074b127b025dd6070b120e240033475df4074b120016015df4074b12336060f9074b1200160160f9074b120000ada4",
- "08066ed8124a120030000628000e24001720001d24002830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009066ed8124a120030000628000e24001720001d24002a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b046ed8124a121d240033004fe0124a120016014fe0124a1233004fe5124a120016004fe5124a127b044fe5120a121d2400010058005800130076e6324a12339e4ff4124a120016014ff4124a12338c4ff9124a120016014ff9124a1233794fc2134a120016014fc2134a1233604fc7134a120016014fc7134a12334c4ecc134a120016014ecc134a1233004fd1134a120016004fd1134a127b044fd1130a121d24000100740074004d0056d5334a1233a04fdb134a120016014fdb134a1233a350e0134a1200160150e0134a1233a14de8134a120016014de8134a1233994fea134a120016014fea134a1233684fef134a120016014fef134a12336950f4134a1200160150f4134a1233004ec0144a120016014ec0144a1233004fc7144a120016004fc7144a127b044fc7140a121d240033544fe0144a120016014fe0144a12335f4fe5144a120016014fe5144a12334f4fea144a120016014fea144a1233484fef144a120016014fef144a1233004ff4144a120016004ff4144a127b044ff4140a121d24007b0540c0150a122a3000331b4fc7154a120016014fc7154a1233004fcc154a120016004fcc154a127b054fcc150a122a30001e0177df150a127b054ec1160a122a30001f204ec1160a1233004fc2164a120016014fc2164a1233004ecc164a120016004ecc164a127b054ecc160a122a3000336d4ed1164a120016014ed1164a1201003c003c001b0072d3364a12331d4fd6164a120016014fd6164a12334f4fdb164a120016014fdb164a120100200020004d0063df364a1233424ee5164a120016014ee5164a12335d4bed164a120016014bed164a1233154dc5174a120016014dc5174a1233115dc7174a120016015dc7174a1233104fcc174a120016014fcc174a12330a4ed1174a120016014ed1174a1233144ed6174a120016014ed6174a12330d5adf174a120016015adf174a1233154ee5174a120016014ee5174a120000000000000018a8",
- "33ba4fea0c4a120016014fea0c4a1233ba4fc20d4a120016014fc20d4a12010040004000000069c62d4a1233004fcc0d4a120016014fcc0d4a1233004fd10d4a120016004fd10d4a127b034fd10d0a1217200033004fd60d4a120016014fd60d4a1233004fea0d4a120016014fea0d4a1233004ec20e4a120016014ec20e4a1233004ed60e4a120016014ed60e4a1233004fea0e4a120016014fea0e4a1233004fef0e4a120016004fef0e4a127b044fef0e0a121d2800339d4ff40e4a120016014ff40e4a12339f4ff90e4a120016014ff90e4a1233a84fc20f4a120016014fc20f4a1233844fc70f4a120016014fc70f4a12336d4fcc0f4a120016014fcc0f4a1233754fd10f4a120016014fd10f4a12010066006600170061d12f4a120100420042007c006ad32f4a12335f4fd60f4a120016014fd60f4a1233004edb0f4a120016004edb0f4a127b044fdb0f0a121d2800333b4fe50f4a120016014fe50f4a1233004eea0f4a120016004eea0f4a127b044fea0f0a121d2800334a4ec7104a120016014ec7104a1233454fcc104a120016014fcc104a12334b4fd1104a120016014fd1104a1233414dd9104a120016014dd9104a12333d4fdb104a120016014fdb104a1233004ee0104a120016004ee0104a127b044fe0100a121d2800333c4ee5104a120016014ee5104a12333a4fea104a120016014fea104a1233414fef104a120016014fef104a1233454ef4104a120016014ef4104a12333f4ff9104a120016014ff9104a1233004ec2114a120016004ec2114a127b044ec2110a121d2800333c4fcc114a120016014fcc114a1233004fd1114a120016004fd1114a127b044fd1110a121d280033164fdb114a120016014fdb114a1233004fe0114a120016014fe0114a1233004fef114a120016004fef114a127b044fef110a121d280033004ff4114a120016014ff4114a1233004ecc124a120016014ecc124a12080661d8124a120030000628000e28001720001d280028300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090661d8124a120030000628000e24001720001d2400283000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0461d8124a121d240000000000eeca",
- ].compactMap({
- return Data(hexadecimalString: $0)
- }).map({
- return try! HistoryPage(pageData: $0, pumpModel: model)
- })
- // Assert that all events are in chronological order, even though there is a +3 and -3 hour time change in pages[7]
- var nextDate = Date.distantFuture
- for page in pages {
- let (timestampedEvents, _, cancelledEarly) = page.timestampedEvents(after: .distantPast, timeZone: TimeZone(secondsFromGMT: 0)!, model: model)
- XCTAssertFalse(cancelledEarly)
- for event in timestampedEvents.reversed() {
- XCTAssertLessThanOrEqual(event.date, nextDate)
- nextDate = event.date
- }
- }
- }
- }
|