BasalScheduleTests.swift 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // BasalScheduleTests.swift
  3. // RileyLink
  4. //
  5. // Created by Jaim Zuber on 5/2/17.
  6. // Copyright © 2017 LoopKit Authors. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import MinimedKit
  10. class BasalScheduleTests: XCTestCase {
  11. var sampleData: Data {
  12. let sampleDataString = "06000052000178050202000304000402000504000602000704000802000904000a02000b04000c02000d02000e02000f040010020011040012020013040014020015040016020017040018020019000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
  13. return Data(hexadecimalString: sampleDataString)!
  14. }
  15. func testBasicConversion() {
  16. let profile = BasalSchedule(rawValue: sampleData)!
  17. XCTAssertEqual(profile.entries.count, 26)
  18. let basalSchedule = profile.entries
  19. // Test each element
  20. XCTAssertEqual(basalSchedule[0].index, 0)
  21. XCTAssertEqual(basalSchedule[0].timeOffset, TimeInterval(minutes: 0))
  22. XCTAssertEqual(basalSchedule[0].rate, 0.15, accuracy: .ulpOfOne)
  23. XCTAssertEqual(basalSchedule[1].index, 1)
  24. XCTAssertEqual(basalSchedule[1].timeOffset, TimeInterval(minutes: 30))
  25. XCTAssertEqual(basalSchedule[1].rate, 2.05, accuracy: .ulpOfOne)
  26. // Tests parsing rates that take two bytes to encode
  27. XCTAssertEqual(basalSchedule[2].index, 2)
  28. XCTAssertEqual(basalSchedule[2].timeOffset, TimeInterval(minutes: 60))
  29. XCTAssertEqual(basalSchedule[2].rate, 35.00, accuracy: .ulpOfOne)
  30. // Tests parsing entry on the second page
  31. XCTAssertEqual(basalSchedule[25].index, 25)
  32. XCTAssertEqual(basalSchedule[25].timeOffset, TimeInterval(minutes: 750))
  33. XCTAssertEqual(basalSchedule[25].rate, 0.05, accuracy: .ulpOfOne)
  34. XCTAssertEqual(sampleData.hexadecimalString, profile.rawValue.hexadecimalString)
  35. }
  36. func testTxData() {
  37. let profile = BasalSchedule(entries: [
  38. BasalScheduleEntry(index: 0, timeOffset: .hours(0), rate: 1.0),
  39. BasalScheduleEntry(index: 1, timeOffset: .hours(4), rate: 2.0),
  40. ])
  41. XCTAssertEqual("280000500008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", profile.rawValue.hexadecimalString)
  42. }
  43. func testDataFrameParsing() {
  44. let frames = DataFrameMessageBody.dataFramesFromContents(sampleData)
  45. XCTAssertEqual("0106000052000178050202000304000402000504000602000704000802000904000a02000b04000c02000d02000e02000f04001002001104001202001304001402", frames[0].txData.hexadecimalString)
  46. XCTAssertEqual("0200150400160200170400180200190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", frames[1].txData.hexadecimalString)
  47. XCTAssertEqual("8300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", frames[2].txData.hexadecimalString)
  48. XCTAssertEqual(3, frames.count)
  49. }
  50. func testEmptySchedule() {
  51. let emptyData = Data(hexadecimalString: "00003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!
  52. let profile = BasalSchedule(rawValue: emptyData)
  53. XCTAssertNil(profile)
  54. XCTAssertEqual(emptyData, BasalSchedule(entries: []).rawValue)
  55. }
  56. }