Can advance byte index in byte stream

This commit is contained in:
Ben Davis
2016-03-13 11:34:53 +00:00
parent 8faed1ba29
commit 167579afaa
3 changed files with 65 additions and 0 deletions
+2
View File
@@ -17,5 +17,7 @@ public protocol ByteStream {
func nextBytes(numberOfBytes: Int) -> NSData?
func indexIsValid(index: Int) -> Bool
func advanceBy(numberOfBytes: Int)
}
@@ -48,4 +48,18 @@ class NSDataByteStream: ByteStream {
return index >= 0 && index <= self.length
}
func advanceBy(numberOfBytes: Int) {
let finalIndex = self.currentIndex + numberOfBytes
if finalIndex > self.length {
self.advancePointer(self.length - self.currentIndex)
} else if finalIndex < 0 {
self.advancePointer(-self.currentIndex)
} else {
self.advancePointer(numberOfBytes)
}
}
}
@@ -84,4 +84,53 @@ class NSDataByteStreamTests: XCTestCase {
XCTAssertEqual(bytes, NSData(byteArray: [5, 6]))
XCTAssertEqual(byte, UInt8(7))
}
func testCanAdvanceForward1Byte() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
byteStream.advanceBy(1)
let byte = byteStream.nextByte()
XCTAssertEqual(byte, 6)
}
func testCanAdvanceForwardMultipleBytes() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
byteStream.advanceBy(3)
let byte = byteStream.nextByte()
XCTAssertEqual(byte, 8)
}
func testCanAdvanceBackward1Byte() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
var byte = byteStream.nextByte()
XCTAssertEqual(byte, 5)
byteStream.advanceBy(-1)
byte = byteStream.nextByte()
XCTAssertEqual(byte, 5)
}
func testCanAdvanceBackwardMultipleBytes() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
var byte = byteStream.nextByte()
byte = byteStream.nextByte()
XCTAssertEqual(byte, 6)
byteStream.advanceBy(-2)
byte = byteStream.nextByte()
XCTAssertEqual(byte, 5)
}
func testAdvanceForwardTooFarStopsAtEnd() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
byteStream.advanceBy(999)
XCTAssertEqual(byteStream.currentIndex, 4)
}
func testAdvanceBackTooFarStopsAtBeggining() {
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
byteStream.advanceBy(-999)
XCTAssertEqual(byteStream.currentIndex, 0)
}
}