ControlByte payloadSize determined for values smaller than 29. On to the next challenge.

Signed-off-by: Adam Rocska <adam.rocska@adams.solutions>
This commit is contained in:
Adam Rocska 2020-04-30 16:59:44 +02:00
parent 7bc612efee
commit 934dadc269
2 changed files with 32 additions and 1 deletions

View File

@ -3,6 +3,7 @@ import Foundation
struct ControlByte {
let type: DataType
let payloadSize: UInt32
init?(bytes: Data) {
if bytes.count == 0 || bytes.count > 5 { return nil }
@ -16,6 +17,15 @@ struct ControlByte {
else {
return nil
}
let payloadSizeDefinition = firstByte & 0b0001_1111
switch payloadSizeDefinition {
case _ where payloadSizeDefinition < 29:
payloadSize = UInt32(payloadSizeDefinition)
default:
return nil
}
self.type = type
}

View File

@ -51,4 +51,25 @@ class ControlByteTest: XCTestCase {
}
}
func testInit_nilIfDataTypeNotRecognized() {
XCTAssertNil(ControlByte(bytes: Data([0b0000_1111, 0b0000_1111, 0b0000_0000])))
}
func testInit_payloadSizeDefinition_lessThan29() {
let testInput: [(expectedPayloadSize: UInt32, byte: UInt8)] = ControlByteTest
.nonExtendedRawValues
.reduce([]) { byteSequence, typeDefinition in
byteSequence + (0..<29).map({
(expectedPayloadSize: UInt32($0), byte: $0 | (typeDefinition << 5))
})
}
for (expectedPayloadSize, byte) in testInput {
XCTAssertEqual(
expectedPayloadSize,
ControlByte(bytes: Data([byte]))?.payloadSize
)
}
}
}