Skip to content

Commit 24837e9

Browse files
authored
Merge pull request #3 from tbartelmess/nio-support
Added a package for NIO Support
2 parents 4d541c6 + f61f1e3 commit 24837e9

File tree

7 files changed

+74
-1
lines changed

7 files changed

+74
-1
lines changed

Package.swift

+7
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,17 @@ let package = Package(
2424
swiftSettings: [
2525
.define("USE_HARDWARE")
2626
]),
27+
.target(name: "CRC32CNIOSupport",
28+
dependencies: ["CRC32C",
29+
.product(name: "NIO", package: "swift-nio")]),
2730
.target(name: "CIntelCRC"),
2831
.testTarget(
2932
name: "CRC32CTests",
3033
dependencies: ["CRC32C"]),
34+
.testTarget(
35+
name: "CRC32CNIOSupportTests",
36+
dependencies: ["CRC32CNIOSupport",
37+
.product(name: "NIO", package: "swift-nio")]),
3138
.target(name: "GenerateLookupTable"),
3239
.target(name: "crc32c-tool",
3340
dependencies:["CRC32C",

Sources/CRC32C/CRC32C.swift

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ public struct CRC32C {
2626
update(Array<UInt8>(data))
2727
}
2828

29+
public mutating func update<T: RandomAccessCollection>(_ data: T) where T.Element == UInt8 {
30+
update(Array<UInt8>(data))
31+
}
32+
2933
public mutating func finalize() {
3034
value = ~value
3135
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import NIO
2+
import CRC32C
3+
4+
extension ByteBuffer {
5+
public func crc32(at: Int, length: Int) -> UInt32 {
6+
guard let view = self.viewBytes(at: at, length: length) else {
7+
return ~0
8+
}
9+
var crc = CRC32C()
10+
crc.update(view)
11+
crc.finalize()
12+
return crc.value
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import XCTest
2+
import NIO
3+
import CRC32CNIOSupport
4+
5+
6+
final class CRCByteBufferTests: XCTestCase {
7+
8+
9+
func assertCRCByteBufferRoundTrip(bytes: [UInt8], expected: UInt32) {
10+
let buffer = ByteBufferAllocator().buffer(bytes: bytes)
11+
XCTAssertEqual(buffer.crc32(at: 0, length: buffer.readableBytes), expected)
12+
}
13+
func testSimpleNumbersCRC32() {
14+
let numbers:[UInt8] = [0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]
15+
let expected: UInt32 = 0x2F720F20
16+
assertCRCByteBufferRoundTrip(bytes: numbers, expected: expected)
17+
}
18+
19+
func testSimpleData() {
20+
let numbers:[UInt8] = [0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, // 64 bit
21+
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, // 128 bit
22+
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef] // 192 bit
23+
let expected: UInt32 = 0xBE6DF95B
24+
assertCRCByteBufferRoundTrip(bytes: numbers, expected: expected)
25+
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#if !canImport(ObjectiveC)
2+
import XCTest
3+
4+
extension CRCByteBufferTests {
5+
// DO NOT MODIFY: This is autogenerated, use:
6+
// `swift test --generate-linuxmain`
7+
// to regenerate.
8+
static let __allTests__CRCByteBufferTests = [
9+
("testSimpleData", testSimpleData),
10+
("testSimpleNumbersCRC32", testSimpleNumbersCRC32),
11+
]
12+
}
13+
14+
public func __allTests() -> [XCTestCaseEntry] {
15+
return [
16+
testCase(CRCByteBufferTests.__allTests__CRCByteBufferTests),
17+
]
18+
}
19+
#endif

Tests/CRC32CTests/CRC32Tests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import XCTest
2-
@testable import CRC32C
2+
import CRC32C
33

44
final class Swift_CRC32Tests: XCTestCase {
55
func testSimpleNumbersCRC32() {

Tests/LinuxMain.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import XCTest
22

3+
import CRC32CNIOSupportTests
34
import CRC32CTests
45

56
var tests = [XCTestCaseEntry]()
7+
tests += CRC32CNIOSupportTests.__allTests()
68
tests += CRC32CTests.__allTests()
79

810
XCTMain(tests)

0 commit comments

Comments
 (0)