|
@@ -0,0 +1,433 @@
|
|
|
|
|
+//
|
|
|
|
|
+// GlucoseBackfillMessageTests.swift
|
|
|
|
|
+// xDripG5Tests
|
|
|
|
|
+//
|
|
|
|
|
+// Copyright © 2018 LoopKit Authors. All rights reserved.
|
|
|
|
|
+//
|
|
|
|
|
+
|
|
|
|
|
+import XCTest
|
|
|
|
|
+@testable import CGMBLEKit
|
|
|
|
|
+
|
|
|
|
|
+class GlucoseBackfillMessageTests: XCTestCase {
|
|
|
|
|
+
|
|
|
|
|
+ func testTxMessage() {
|
|
|
|
|
+ let message = GlucoseBackfillTxMessage(byte1: 5, byte2: 2, identifier: 0, startTime: 5439415, endTime: 5440614) // 20 minutes
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Data(hexadecimalString: "50050200b7ff5200660453000000000000007138")!, message.data)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testRxMessage() {
|
|
|
|
|
+ let message = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000100b7ff52006604530032000000e6cb9805")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: message.status))
|
|
|
|
|
+ XCTAssertEqual(1, message.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(0, message.identifier)
|
|
|
|
|
+ XCTAssertEqual(5439415, message.startTime)
|
|
|
|
|
+ XCTAssertEqual(5440614, message.endTime)
|
|
|
|
|
+ XCTAssertEqual(50, message.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0xcbe6, message.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0xbc46
|
|
|
|
|
+ // 0b10111100 01000110
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: message.identifier)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0100bc460000b7ff52008b0006eee30053008500")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "020006eb0f025300800006ee3a0353007e0006f5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "030066045300790006f8")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(message.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(message.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(139, messages[0].glucose)
|
|
|
|
|
+ XCTAssertEqual(5439415, messages[0].timestamp)
|
|
|
|
|
+ XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[0].state))
|
|
|
|
|
+ XCTAssertEqual(-18, messages[0].trend)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(133, messages[1].glucose)
|
|
|
|
|
+ XCTAssertEqual(5439715, messages[1].timestamp)
|
|
|
|
|
+ XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[1].state))
|
|
|
|
|
+ XCTAssertEqual(-21, messages[1].trend)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(128, messages[2].glucose)
|
|
|
|
|
+ XCTAssertEqual(5440015, messages[2].timestamp)
|
|
|
|
|
+ XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[2].state))
|
|
|
|
|
+ XCTAssertEqual(-18, messages[2].trend)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(126, messages[3].glucose)
|
|
|
|
|
+ XCTAssertEqual(5440314, messages[3].timestamp)
|
|
|
|
|
+ XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[3].state))
|
|
|
|
|
+ XCTAssertEqual(-11, messages[3].trend)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(121, messages[4].glucose)
|
|
|
|
|
+ XCTAssertEqual(5440614, messages[4].timestamp)
|
|
|
|
|
+ XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[4].state))
|
|
|
|
|
+ XCTAssertEqual(-08, messages[4].trend)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(message.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertEqual(message.endTime, messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertTrue(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testGlucoseBackfill2() {
|
|
|
|
|
+ let message = GlucoseBackfillTxMessage(byte1: 5, byte2: 2, identifier: 0, startTime: 4648682, endTime: 4650182) // 25 minutes
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Data(hexadecimalString: "50050200eaee4600c6f446000000000000009f6d")!, message.data, message.data.hexadecimalString)
|
|
|
|
|
+
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000103eaee4600c6f446003a0000004f3ac9e6")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(3, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(4648682, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(4650182, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(58, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0x3a4f, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0x6e3c
|
|
|
|
|
+ // 0b01101110 00111100
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "01c06e3c0000eaee4600920007fd16f046009500")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "02c0070042f14600960007026ef2460099000704")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "03c09af3460093000700c6f44600900007fc")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertTrue(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(6, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testMalformedBackfill() {
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0100bc460000b7ff52008b0006eee30053008500")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "020006eb0f025300800006ee3a0353007e0006")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(3, buffer.glucose.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testGlucoseBackfill3() {
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "510001023d6a0e00c16d0e00280000005b1a9154")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(2, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(944701, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(945601, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(40, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0x1A5B, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0x440c
|
|
|
|
|
+ // 0b01000100 00001100
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0x80)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0180440c00003d6a0e005c0007fe696b0e005d00")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "028007ff956c0e005e000700c16d0e005d000700")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertTrue(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(4, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testGlucoseBackfill4() {
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000103c9740e004d780e0028000000235bd94c")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(3, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(947401, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(948301, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(40, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0x5B23, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0x04d0
|
|
|
|
|
+ // 0b00000100 11010000
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "01c04d0c0000c9740e005a000700f5750e005800")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "02c007ff21770e00590007ff4d780e0059000700")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertTrue(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(4, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testNotGlucoseBackfill1() {
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "5100010339410e0085a90e00ac06000070ca9143")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(3, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(934201, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(960901, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(1708, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0xCA70, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0x4a4f
|
|
|
|
|
+ // 0b01001010 01001111
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "01c04a4f4a5558ef554453b7392a0df008571a7f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "02c0451e0d74bdec596b633cf2b03d511ef3d048")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "03c009145e959ca51f7a1663ca31676b175d7bc7")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "04c0de00c954fcd3281d5163ed873cdc136fca3e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "05c0c7da188dd5fbb8997206da1cc8d0c22f8434")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "06c04d50b29df06b12e7162f2d73fd553e44e469")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "07c02b4bb61d66cf6e949ee0f07dbe0cc12127ae")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "08c03bf887be09ece7595adfee494b25368103b4")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "09c07eefb9b5398468a53f00355341d19b50c8b1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0ac028f0ddb4dc09a2c74deedf7fdff13fcd6b0e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0bc0ad2d7311ac9ec1908fb7ee5557c463ea4fea")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0cc0bf3c62d9aa62d7c3d447c959b51d31fd016d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0dc0278116abd1252ad66c894a39ed7c6d72086e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0ec0aaee3bf9b05ccb7b23e1c27d777173c4d9fd")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0fc044048720d76a696249737f999f944995e44e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "10c0495e4cb7f22327a920a843de1b4522a68108")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "11c058c482389192ed920e322b71900d747a9492")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "12c0eac06906ff4863f0e8da07d1ead29fc15bd3")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "13c0c0be38548fe9e229c64c9c0f3e9b4c4c1d83")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "14c018a936bdde548e4244093e77c87adda0a1cf")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "15c0fb97d1d147dd0bc6552faa4d62ab553e1682")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "16c0f15f8cb77decb934bfe0c711a026dd4bf36b")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "17c0bd268b0eee07ed20a0f3856ea449b1503708")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "18c00872ed5a996a13480b81fc82b6ca1e7dd379")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "19c06fb4c5bc84e63688b0a77edbab85bfb61b45")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1ac071d29d30edb43db6b8e114bbbcd67f9dd3a9")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1bc0569e17a8a80c015def11ddce1b8f194ff6e2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1cc0df79ffbc1e077fe249b47550feb5dcd53044")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1dc0b557e2ba03caed61de30221b0330e1cc49b1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1ec006f05e739d737939baf8b14a8b7a6faae96e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1fc00b82d430e9e75fb8e7e2affbdd292a41fad2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "20c0fbf8e8f2686aaaf19d2809eecd3bd4f63516")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "21c0a7df809e73538e459c1a9cd27a566f636e22")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "22c0dbb3c23d7d7847dee77311287e6c6b192eb4")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "23c0d30038d70241a80b9e390778a897dd1632cc")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "24c0177b23127b464c07a499abeff05f13e40998")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "25c0855350c7c4a335e95d2e569996639e8341b4")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "26c0d42874475710a50764d4a4166c0e420aff7f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "27c0facb1d61cb8057de64546fc9f24f93603093")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "28c080befb84f22c60d398f017dde114d0557b27")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "29c07555e92425342c0674b62fa517b13ba0e3b0")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2ac0923624bce36c89fade1f66bd7ae1e8e7d598")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2bc0d345ceea668373d31f95b03a6ee7fff1a3b5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2cc045e409b8d31dd53ae9d353f35738819fbb79")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2dc0a5d31fd3c3b7b217d3f79b245d3714b0523d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2ec0eb576e0193584bff8ecada0dc54e4ebde86c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2fc092b8ef52003f8b76e90d920ca738c998bb70")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "30c07cfa0f7a69d14b79f605d254a164fd67c658")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "31c049a329162e03f41c12db845b73301f5bbb81")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "32c08a21ca0995b5aa413897ea9e2b7c563ced07")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "33c05d51a18e19209f1c55054bd2f74677c71070")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "34c0299e29ae5576a220b0b767fc4e898aaf2df1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "35c0bbb554546b69c53b4b3a63bd524bfbe728e6")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "36c0cd4e8c6e10e72950e66bfa0d23b954a7aede")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "37c0ea5df836af737298d44b4b156ced47727920")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "38c02303edefc4916cfdba55829426c153d0d30c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "39c0dfee091fea60c2da239c9aabef8eddbe49b5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3ac02788f23fb030e7606329ed24cbee10bc20eb")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3bc00a601d46c10bab8cdf04513a47550b0e4fe5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3cc072ea5e514432c81e325464e1ac2d659378d2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3dc0f050e994caa508fdea7202ed70a4acc6e8ab")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3ec069ab0d13863943415b492569db29b9594dbe")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3fc02c37277a98b88956f0def9ad866f44ca6d9f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "40c0e5bd6aa2dbd835fab2ec238de4a635a3f6cb")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "41c0aafa8812d94d5fe722b3ecfb74eb4c12c622")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "42c08c5b4bb2f28069fc6f9dcb26bc84c0cc01c7")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "43c04ad95cefa1f62a18fa2c5a05bac208685cdb")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "44c0ffe910ddc010b30f457578ab24a866b8a94d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "45c01b0bb36e58f401eb15da2e6710721e39c573")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "46c06165075618fc9626c53acdd9cb8bcfb0719f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "47c081599f76725e30d4de39cdcc7f7c0c918d68")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "48c0563b99dce4913105b793f4d539fe668feef6")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "49c04ebaaf9f4dfda6cac4d617cd07098fec39f0")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4ac04c1ae961bc4f3e2cd395396dc8098bbf4bd5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4bc0d95ed88f296e8d68c35085af86e5ef8d8bf0")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4cc0658ccce111259ce8ac5cbedfc46deda77433")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4dc05fda2f8d2885082db4b1356c5e2a0e830471")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4ec066c7813ff84a9da11fe343e5a95bbfa3082c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4fc03bcfd6fe6d9657d04f06ed7bc461ebe18d47")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "50c035bbe880ba24d7c84f73ae061b33d62a1845")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "51c0650f0a6bbc91b2771549cf49a5a4faf8b278")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "52c07ac551477e6cd10fe6a3b43d62b02569d110")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "53c005f79d6de0ec017e7a0c98961ce6770f885d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "54c0d05fee0b5f5bf9de8c61b58f8634ecbf3347")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "55c0e0c7d345fbc40f35aed12e82f8ccb0ed9335")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "56c0b1c8b263179e")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertNotEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertNotEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(191, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testNotGlucoseBackfill2() {
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000102b1aa0e00e5b20e00a000000020a39b7e")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(2, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(961201, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(963301, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(160, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0xA320, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ // 0xcde3
|
|
|
|
|
+ // 0b11001101 11100011
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0x80)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0180cde3fd48248e37a7bf6c2d9d78d4bfef6d5b")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "02809f074c9039b6d3b841f422cf36398338f98c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "038004160a5a1ad37c382f3ca23ea215c644f7b6")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "04802ed7376fa7c83c3ecf0b645233f9b3c80238")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "05805692724e630a703f01b0a942250f725553d2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "06804ca2727a4051033a550da80905caf77c735d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "07808f937b4b9602c5dd6fa13ae983e00783b28e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "088069846e672c106b339159ead9ee1c08e1a159")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertNotEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertNotEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+ XCTAssertFalse(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(17, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ func testNotGlucoseBackfill3() {
|
|
|
|
|
+ let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000102b6a36500010c6600ac0600000147db0a")!)!
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
|
|
|
|
|
+ XCTAssertEqual(1, response.backfillStatus)
|
|
|
|
|
+ XCTAssertEqual(2, response.identifier)
|
|
|
|
|
+ XCTAssertEqual(6661046, response.startTime)
|
|
|
|
|
+ XCTAssertEqual(6687745, response.endTime)
|
|
|
|
|
+ XCTAssertEqual(1708, response.bufferLength)
|
|
|
|
|
+ XCTAssertEqual(0x4701, response.bufferCRC)
|
|
|
|
|
+
|
|
|
|
|
+ var buffer = GlucoseBackfillFrameBuffer(identifier: 0x80)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0180e1234bdf92845cec52822a8894854582b2b2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "02800f8a38cc876ad33ae0acdc25921132cc6f0d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "038032a6cd9e6d447916dd0b9699e499ae79b8d1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "048045f4b95e0ad80955d3a899d6083bd142f863")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "05809cf9c189744ab66f6ca5c2833ef27442fa71")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "068053694b279275f0d23eb826681e20e5ebb79d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "078098b921155eb5aed63119d5faec3ef3e53a37")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "08807c87277557a0828e8dc81ff76f1a6e197103")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0980b8378b133898ce73f7989d67360123e9fdd8")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0a80383ce19d943a38796b594ff95a2dc93bd6a2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0b806b548c5997dc67ed4fe07bcf236d59dd7f94")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0c802cb2382f40a06fde5f2dff3f0b8226a11f12")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0d8029800ae513c5b7bc8ea733544b7da84ded17")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0e80a95b6c3d36183e4409f916a6f1f775af338e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "0f80d098732f2abcf4a90628f321a048349142ff")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "108077294e9d029bdc0602c76671d88ff4a87596")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1180bac50f8d705f6732c34b935a0b06545d6d8f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1280cf6b9eb0d2f0059c1a7b5c65acb83eb43836")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "13802f408f68fc7e48858daecf64d01f3f61827e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1480cd5975c1062ed45311a2602c0bbc9c78cf21")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1580b6e27f3350bc7d4eb908313710931cbd4f23")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "168061f70e5e27e8b72faecfbb58b6b6ff65cbf0")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "178066bdd3a0b1e1ed0af8b2af88dcb1f4b1c3a4")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "18801eb9326019bca25b74804d196c04d079e495")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1980a29097393f81aaef79ef421af54ccd3c35ed")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1a80a3039b0372ddd79ef65293e4e99484573ab3")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1b807e755140ea79b1913a7c491e606b7d1e4542")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1c800c968daf03958bd8784e1cf8cea4fa903a80")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1d8044c5c7baebadbf8e6877d725ab84484e6755")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1e8036be160e8a03d2c07552fc513c8869170528")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "1f8038483ab634e7707e9ab8c8e3f87dd67f423f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2080f184e4457558d9b7944f21d6421b717ddfb1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2180bb4da6197852102a3a04b8acccea3c54f0f9")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2280da93975f3ea1c39d2aff5dbbc4b183b66044")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "23804678951cdc83923fe5a88bda66221a48360b")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2480aa9dc3fee16106bd551754d896da72ff772c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2580b825bb4eba580b57caadda1b90b449a8f2c5")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2680117b62c286b395d2bf016848c65953595f19")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "27806d524b2b191bd9582f47fd3956ab851207af")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2880c7df85c2ee5e9b3f5ae68ffba44a86e237e8")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2980947fec3646851a510c8a61c0b3b7d90e410b")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2a8014b04b3ff32e4d9d16f46880533cf4562af4")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2b80c754e48edfa84f2f3b29976ce59cc110747d")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2c8095a3ab4b66254954a51ca5e5c92d07be80fc")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2d80bc4afa73d7f222f1b9e56083171057e32ca3")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2e80c88dbe9a052d7ffd29d2f665bdd66811712f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "2f804d2f9ee36fd6f3f48c30429c1629e39bbe3f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "30808b01f598fc6420d85b3190d15f8d55f43faf")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "31801c171908c8ded10e81123f453c571c8f5199")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "32806275a5652f2447f63f1ab5d0dac84387d80c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3380f095361816ab06f0209a6ec3411c8f0c6ce1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3480a99ac0dae0c87f6a1d4ee4fe4e19671c29ba")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3580811db50e1625a3b88305ea5c34b53e20700e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "36800fbf211b6a454c788aa17b0cf14db76695a9")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3780dfc186d1c189114f182709efc464f48c6b2f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "38805e629e8e6457b1ec149897210cb6336b123f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "398045d4dc9f4c074ec0e926a8d1768ae92b4866")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3a801edf0d5d1c1a86c90c5eeef69e115fdd513a")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3b8084223228b158081b465c74454450ec19a4c1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3c80fa306d71fc211bd9b9e55aeb16c582d21ec2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3d8072d8bbec74f1436958db431a92fc66cf5dd2")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3e80888ef69a91f8dbb0ce70b6e5ec9289245878")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "3f8069c0d6d14e580be92f87a3255e124b25b451")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4080b3cbae3d50ea52720bf5029243a4a9fea906")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4180384321d07a4b5378aa272c9a7247830624b8")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4280acf0b265dd82b68aeec5114161a34135b30e")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "43802d709c604266db64a4b5a5e6f6d8cfd7ece1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "44807b48711b0630cd919dbf9ea7bf81efa1e8f1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4580c0282b679f9746ece875482d5e9a5ed59cb8")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "46808c7b718de4299f081449cce9aa9afadfcea9")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "478066cd4c36d6e816413b15955c958da4d8e866")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "48809b5170078157c542236bc7a09c96bc559069")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "49800be65a0bce639c69cd3d64db0fa22570756f")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4a80e5ebd5381b077a8ac56e952b631256a076cc")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4b80fb32d28e39021d49dc7b7ee65272ca1f28c1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4c8004486cc3dcad9f39c602d3ed9030e327cec3")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4d809a5800c6d647c5f99e40a15327957745dce1")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4e80d03a0b5368fda78b28d3975500ab160ac693")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "4f80dbc5ea65f540933f858a425ecdb378f62990")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "50802e7980ce9365ad4e434308fb2a8102dc9f6a")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "5180b71311e183ad9feecfd43b68072d5a9ad4af")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "5280e721c37d2b57f95cbf5f51025fb22b6ca60c")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "53805749eb01f070a5b015dcd0f68f5fea0b40c6")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "5480fae4ee747357e4d73265ad9411c565c41865")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "5580b75e9c62c7c2aa3ea3f94d219ef7330077d7")!)
|
|
|
|
|
+ buffer.append(Data(hexadecimalString: "5680f2c59ee6b54a")!)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(Int(response.bufferLength), buffer.count)
|
|
|
|
|
+ XCTAssertEqual(response.bufferCRC, buffer.crc16)
|
|
|
|
|
+
|
|
|
|
|
+ let messages = buffer.glucose
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertNotEqual(response.startTime, messages.first!.timestamp)
|
|
|
|
|
+ XCTAssertNotEqual(response.endTime, messages.last!.timestamp)
|
|
|
|
|
+ XCTAssertFalse(messages.first!.timestamp <= messages.last!.timestamp)
|
|
|
|
|
+
|
|
|
|
|
+ XCTAssertEqual(191, messages.count)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|