Skip to content

Commit c95d6c0

Browse files
committed
Add benchmarks for bit readers and writers
1 parent 0b6a661 commit c95d6c0

6 files changed

Lines changed: 315 additions & 1 deletion

File tree

BitByteData.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
060F68322176024400688683 /* LsbBitReaderBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 060F68312176024400688683 /* LsbBitReaderBenchmarks.swift */; };
11+
060F6834217604E800688683 /* MsbBitReaderBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 060F6833217604E800688683 /* MsbBitReaderBenchmarks.swift */; };
1012
065DD5E421673BC100704028 /* BitByteData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F0656C1FFAEA4B00312A82 /* BitByteData.framework */; };
13+
06A81B0F2177947600B6B7BB /* LsbBitWriterBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A81B0E2177947600B6B7BB /* LsbBitWriterBenchmarks.swift */; };
14+
06A81B112177955600B6B7BB /* MsbBitWriterBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A81B102177955500B6B7BB /* MsbBitWriterBenchmarks.swift */; };
1115
06ADF4CB214BB86600B8F0E9 /* ByteReaderBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06ADF4CA214BB86600B8F0E9 /* ByteReaderBenchmarks.swift */; };
1216
06F065751FFAEA8700312A82 /* LsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06F065571FFAEA1F00312A82 /* LsbBitReader.swift */; };
1317
06F065761FFAEA8700312A82 /* BitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06F065581FFAEA1F00312A82 /* BitReader.swift */; };
@@ -43,8 +47,12 @@
4347
/* End PBXContainerItemProxy section */
4448

4549
/* Begin PBXFileReference section */
50+
060F68312176024400688683 /* LsbBitReaderBenchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LsbBitReaderBenchmarks.swift; sourceTree = "<group>"; };
51+
060F6833217604E800688683 /* MsbBitReaderBenchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsbBitReaderBenchmarks.swift; sourceTree = "<group>"; };
4652
062BE3301FFBB9E300343CAD /* LinuxMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinuxMain.swift; sourceTree = "<group>"; };
4753
065DD5DF21673BC100704028 /* BitByteDataBenchmarks.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BitByteDataBenchmarks.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
54+
06A81B0E2177947600B6B7BB /* LsbBitWriterBenchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LsbBitWriterBenchmarks.swift; sourceTree = "<group>"; };
55+
06A81B102177955500B6B7BB /* MsbBitWriterBenchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsbBitWriterBenchmarks.swift; sourceTree = "<group>"; };
4856
06ADF4CA214BB86600B8F0E9 /* ByteReaderBenchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteReaderBenchmarks.swift; sourceTree = "<group>"; };
4957
06F065571FFAEA1F00312A82 /* LsbBitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LsbBitReader.swift; sourceTree = "<group>"; };
5058
06F065581FFAEA1F00312A82 /* BitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitReader.swift; sourceTree = "<group>"; };
@@ -87,6 +95,10 @@
8795
isa = PBXGroup;
8896
children = (
8997
06ADF4CA214BB86600B8F0E9 /* ByteReaderBenchmarks.swift */,
98+
060F68312176024400688683 /* LsbBitReaderBenchmarks.swift */,
99+
060F6833217604E800688683 /* MsbBitReaderBenchmarks.swift */,
100+
06A81B0E2177947600B6B7BB /* LsbBitWriterBenchmarks.swift */,
101+
06A81B102177955500B6B7BB /* MsbBitWriterBenchmarks.swift */,
90102
);
91103
path = BitByteDataBenchmarks;
92104
sourceTree = "<group>";
@@ -271,12 +283,16 @@
271283
isa = PBXSourcesBuildPhase;
272284
buildActionMask = 2147483647;
273285
files = (
286+
06A81B112177955600B6B7BB /* MsbBitWriterBenchmarks.swift in Sources */,
287+
060F6834217604E800688683 /* MsbBitReaderBenchmarks.swift in Sources */,
274288
06ADF4CB214BB86600B8F0E9 /* ByteReaderBenchmarks.swift in Sources */,
275289
06F0658F1FFAEAA900312A82 /* LsbBitReaderTests.swift in Sources */,
276290
06F065901FFAEAA900312A82 /* ByteReaderTests.swift in Sources */,
277291
06F0658C1FFAEAA900312A82 /* MsbBitWriterTests.swift in Sources */,
278292
06F0658E1FFAEAA900312A82 /* LsbBitWriterTests.swift in Sources */,
279293
06F0658D1FFAEAA900312A82 /* MsbBitReaderTests.swift in Sources */,
294+
06A81B0F2177947600B6B7BB /* LsbBitWriterBenchmarks.swift in Sources */,
295+
060F68322176024400688683 /* LsbBitReaderBenchmarks.swift in Sources */,
280296
);
281297
runOnlyForDeploymentPostprocessing = 0;
282298
};
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Copyright (c) 2018 Timofey Solomko
2+
// Licensed under MIT License
3+
//
4+
// See LICENSE for license information
5+
6+
import XCTest
7+
import BitByteData
8+
9+
class LsbBitReaderBenchmarks: XCTestCase {
10+
11+
func testBit() {
12+
self.measure {
13+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
14+
15+
for _ in 0..<5_000_000 * 8 {
16+
_ = bitReader.bit()
17+
}
18+
}
19+
}
20+
21+
func testBits() {
22+
self.measure {
23+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
24+
25+
for _ in 0..<1_000_000 * 8 {
26+
_ = bitReader.bits(count: 5)
27+
}
28+
}
29+
}
30+
31+
func testIntFromBits() {
32+
self.measure {
33+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
34+
35+
for _ in 0..<1_000_000 * 4 {
36+
_ = bitReader.int(fromBits: 10)
37+
}
38+
}
39+
}
40+
41+
func testByteFromBits() {
42+
self.measure {
43+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
44+
45+
for _ in 0..<1_000_000 * 8 {
46+
_ = bitReader.byte(fromBits: 6)
47+
}
48+
}
49+
}
50+
51+
func testUint16FromBits() {
52+
self.measure {
53+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
54+
55+
for _ in 0..<1_000_000 * 4 {
56+
_ = bitReader.uint16(fromBits: 13)
57+
}
58+
}
59+
}
60+
61+
func testUint32FromBits() {
62+
self.measure {
63+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
64+
65+
for _ in 0..<1_000_000 * 3 {
66+
_ = bitReader.uint32(fromBits: 23)
67+
}
68+
}
69+
}
70+
71+
func testUint64FromBits() {
72+
self.measure {
73+
let bitReader = LsbBitReader(data: Data(count: 10_485_760)) // 10 MB
74+
75+
for _ in 0..<1_000_000 {
76+
_ = bitReader.uint64(fromBits: 52)
77+
}
78+
}
79+
}
80+
81+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) 2018 Timofey Solomko
2+
// Licensed under MIT License
3+
//
4+
// See LICENSE for license information
5+
6+
import XCTest
7+
import BitByteData
8+
9+
class LsbBitWriterBenchmarks: XCTestCase {
10+
11+
func testWriteBit() {
12+
self.measure {
13+
let bitWriter = LsbBitWriter()
14+
15+
for _ in 0..<5_000_000 * 4 {
16+
bitWriter.write(bit: 0)
17+
bitWriter.write(bit: 1)
18+
}
19+
}
20+
}
21+
22+
func testWriteNumberBitsCount() {
23+
self.measure {
24+
let bitWriter = LsbBitWriter()
25+
26+
for _ in 0..<5_000_000 {
27+
bitWriter.write(number: 55, bitsCount: 7)
28+
}
29+
}
30+
}
31+
32+
func testAppendByte() {
33+
self.measure {
34+
let bitWriter = LsbBitWriter()
35+
36+
for _ in 0..<5_000_000 {
37+
bitWriter.append(byte: 37)
38+
}
39+
}
40+
}
41+
42+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Copyright (c) 2018 Timofey Solomko
2+
// Licensed under MIT License
3+
//
4+
// See LICENSE for license information
5+
6+
import XCTest
7+
import BitByteData
8+
9+
class MsbBitReaderBenchmarks: XCTestCase {
10+
11+
func testBit() {
12+
self.measure {
13+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
14+
15+
for _ in 0..<5_000_000 * 8 {
16+
_ = bitReader.bit()
17+
}
18+
}
19+
}
20+
21+
func testBits() {
22+
self.measure {
23+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
24+
25+
for _ in 0..<1_000_000 * 8 {
26+
_ = bitReader.bits(count: 5)
27+
}
28+
}
29+
}
30+
31+
func testIntFromBits() {
32+
self.measure {
33+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
34+
35+
for _ in 0..<1_000_000 * 4 {
36+
_ = bitReader.int(fromBits: 10)
37+
}
38+
}
39+
}
40+
41+
func testByteFromBits() {
42+
self.measure {
43+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
44+
45+
for _ in 0..<1_000_000 * 8 {
46+
_ = bitReader.byte(fromBits: 6)
47+
}
48+
}
49+
}
50+
51+
func testUint16FromBits() {
52+
self.measure {
53+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
54+
55+
for _ in 0..<1_000_000 * 4 {
56+
_ = bitReader.uint16(fromBits: 13)
57+
}
58+
}
59+
}
60+
61+
func testUint32FromBits() {
62+
self.measure {
63+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
64+
65+
for _ in 0..<1_000_000 * 3 {
66+
_ = bitReader.uint32(fromBits: 23)
67+
}
68+
}
69+
}
70+
71+
func testUint64FromBits() {
72+
self.measure {
73+
let bitReader = MsbBitReader(data: Data(count: 10_485_760)) // 10 MB
74+
75+
for _ in 0..<1_000_000 {
76+
_ = bitReader.uint64(fromBits: 52)
77+
}
78+
}
79+
}
80+
81+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) 2018 Timofey Solomko
2+
// Licensed under MIT License
3+
//
4+
// See LICENSE for license information
5+
6+
import XCTest
7+
import BitByteData
8+
9+
class MsbBitWriterBenchmarks: XCTestCase {
10+
11+
func testWriteBit() {
12+
self.measure {
13+
let bitWriter = MsbBitWriter()
14+
15+
for _ in 0..<5_000_000 * 4 {
16+
bitWriter.write(bit: 0)
17+
bitWriter.write(bit: 1)
18+
}
19+
}
20+
}
21+
22+
func testWriteNumberBitsCount() {
23+
self.measure {
24+
let bitWriter = MsbBitWriter()
25+
26+
for _ in 0..<5_000_000 {
27+
bitWriter.write(number: 55, bitsCount: 7)
28+
}
29+
}
30+
}
31+
32+
func testAppendByte() {
33+
self.measure {
34+
let bitWriter = MsbBitWriter()
35+
36+
for _ in 0..<5_000_000 {
37+
bitWriter.append(byte: 37)
38+
}
39+
}
40+
}
41+
42+
}

Tests/LinuxMain.swift

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,64 @@ extension ByteReaderBenchmarks {
125125
}
126126
}
127127

128+
extension LsbBitReaderBenchmarks {
129+
static var allTests: [(String, (LsbBitReaderBenchmarks) -> () -> Void)] {
130+
return [
131+
("testBit", testBit),
132+
("testBits", testBits),
133+
("testIntFromBits", testIntFromBits),
134+
("testByteFromBits", testByteFromBits),
135+
("testUint16FromBits", testUint16FromBits),
136+
("testUint32FromBits", testUint32FromBits),
137+
("testUint64FromBits", testUint64FromBits)
138+
]
139+
}
140+
}
141+
142+
extension MsbBitReaderBenchmarks {
143+
static var allTests: [(String, (MsbBitReaderBenchmarks) -> () -> Void)] {
144+
return [
145+
("testBit", testBit),
146+
("testBits", testBits),
147+
("testIntFromBits", testIntFromBits),
148+
("testByteFromBits", testByteFromBits),
149+
("testUint16FromBits", testUint16FromBits),
150+
("testUint32FromBits", testUint32FromBits),
151+
("testUint64FromBits", testUint64FromBits)
152+
]
153+
}
154+
}
155+
156+
extension LsbBitWriterBenchmarks {
157+
static var allTests: [(String, (LsbBitWriterBenchmarks) -> () -> Void)] {
158+
return [
159+
("testWriteBit", testWriteBit),
160+
("testWriteNumberBitsCount", testWriteNumberBitsCount),
161+
("testAppendByte", testAppendByte)
162+
]
163+
}
164+
}
165+
166+
extension MsbBitWriterBenchmarks {
167+
static var allTests: [(String, (MsbBitWriterBenchmarks) -> () -> Void)] {
168+
return [
169+
("testWriteBit", testWriteBit),
170+
("testWriteNumberBitsCount", testWriteNumberBitsCount),
171+
("testAppendByte", testAppendByte)
172+
]
173+
}
174+
}
175+
128176
XCTMain([
129177
testCase(ByteReaderTests.allTests),
130178
testCase(LsbBitReaderTests.allTests),
131179
testCase(MsbBitReaderTests.allTests),
132180
testCase(LsbBitWriterTests.allTests),
133181
testCase(MsbBitWriterTests.allTests),
134182

135-
testCase(ByteReaderBenchmarks.allTests)
183+
testCase(ByteReaderBenchmarks.allTests),
184+
testCase(LsbBitReaderBenchmarks.allTests),
185+
testCase(MsbBitReaderBenchmarks.allTests),
186+
testCase(LsbBitWriterBenchmarks.allTests),
187+
testCase(MsbBitWriterBenchmarks.allTests)
136188
])

0 commit comments

Comments
 (0)