Skip to content

Commit 22119d5

Browse files
committed
Cleanup
1 parent 50d463d commit 22119d5

File tree

7 files changed

+563
-654
lines changed

7 files changed

+563
-654
lines changed

Sources/Base64Kit/Base64.swift

Lines changed: 21 additions & 343 deletions
Large diffs are not rendered by default.

Sources/Base64Kit/Chromium.swift

Lines changed: 464 additions & 191 deletions
Large diffs are not rendered by default.

Sources/Base64KitPerformanceTest/main.swift

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,64 +21,90 @@ print("------------------------------------------")
2121
print("Encoding")
2222

2323
let data = Data(bytes)
24-
let foundationEncoding = timing(name: "Foundation") {
24+
let foundationEncodingString = timing(name: "Foundation: Data to String ") {
2525
for _ in 1 ... runs {
2626
_ = data.base64EncodedString()
2727
}
2828
}
2929

30-
let base64Encoding = timing(name: "Base64 ") {
30+
let foundationEncodingData = timing(name: "Foundation: Data to Data ") {
3131
for _ in 1 ... runs {
32-
_ = Base64.encode(bytes: bytes) // String(base64Encoding: bytes)
32+
_ = data.base64EncodedData()
3333
}
3434
}
3535

36-
let chromeEncoding = timing(name: "Chromium ") {
36+
let chromeEncodingBytes = timing(name: "Chromium: [UInt8] to [UInt8]") {
3737
for _ in 1 ... runs {
38-
_ = Base64.encodeChromium(bytes: bytes) // String(base64Encoding: bytes)
38+
let _ : [UInt8] = Base64.encodeChromium(bytes: bytes)
39+
}
40+
}
41+
42+
let chromeEncodingString = timing(name: "Chromium: [UInt8] to String ") {
43+
for _ in 1 ... runs {
44+
let _ : String = Base64.encodeChromium(bytes: bytes)
45+
}
46+
}
47+
48+
let chromeEncodingData = timing(name: "Chromium: Data to [UInt8]") {
49+
for _ in 1 ... runs {
50+
let _ : String = Base64.encodeChromium(bytes: data)
3951
}
4052
}
4153

4254
print("------------------------------------------")
4355
print("Decoding")
4456

45-
let foundationDecoding = timing(name: "Foundation") {
57+
let foundationDecodingFromString = timing(name: "Foundation: String to Data ") {
4658
for _ in 1 ... runs {
4759
_ = Data(base64Encoded: base64)
4860
}
4961
}
5062

51-
let base64Decoding = timing(name: "Base64 ") {
63+
let encodedData = Data(base64.utf8)
64+
let foundationDecodingFromData = timing(name: "Foundation: Data to Data ") {
5265
for _ in 1 ... runs {
53-
_ = try! base64.base64decoded()
66+
_ = Data(base64Encoded: encodedData)
5467
}
5568
}
5669

57-
let chromeDecoding = timing(name: "Chromium ") {
70+
let encodedUInt8Array = Array(base64.utf8)
71+
let chromeDecodingFromBytes = timing(name: "Chromium: [UInt8] to [UInt8]") {
5872
for _ in 1 ... runs {
59-
_ = try! Base64.decodeChromium(bytes: [UInt8](base64.utf8)) // String(base64Encoding: bytes)
73+
_ = try! Base64.decodeChromium(bytes: encodedUInt8Array)
6074
}
6175
}
6276

63-
// print("------------------------------------------")
64-
// print("Results")
65-
66-
var result: Int32 = 0
67-
if foundationEncoding < base64Encoding {
68-
print("Base64 encoding must be at least as fast as Foundation encoding")
69-
result = 1
77+
let chromeDecodingFromString = timing(name: "Chromium: String to [UInt8]") {
78+
for _ in 1 ... runs {
79+
_ = try! Base64.decodeChromium(string: base64)
80+
}
7081
}
7182

72-
if foundationDecoding < base64Decoding {
73-
print("Base64 decoding must be at least as fast as Foundation decoding")
74-
result = 1
83+
let chromeDecodingFromData = timing(name: "Chromium: Data to [UInt8]") {
84+
for _ in 1 ... runs {
85+
_ = try! Base64.decodeChromium(bytes: encodedData)
86+
}
7587
}
7688

77-
if result == 0 {
78-
let encodingGain = round(foundationEncoding / base64Encoding * 1000) / 1000
79-
let decodingGain = round(foundationDecoding / base64Decoding * 1000) / 1000
80-
print("Encoding: \(encodingGain)x")
81-
print("Decoding: \(decodingGain)x")
82-
}
89+
// print("------------------------------------------")
90+
// print("Results")
91+
92+
var result: Int32 = 0
93+
//if foundationEncoding < base64Encoding {
94+
// print("Base64 encoding must be at least as fast as Foundation encoding")
95+
// result = 1
96+
//}
97+
//
98+
//if foundationDecoding < base64Decoding {
99+
// print("Base64 decoding must be at least as fast as Foundation decoding")
100+
// result = 1
101+
//}
102+
//
103+
//if result == 0 {
104+
// let encodingGain = round(foundationEncoding / base64Encoding * 1000) / 1000
105+
// let decodingGain = round(foundationDecoding / base64Decoding * 1000) / 1000
106+
// print("Encoding: \(encodingGain)x")
107+
// print("Decoding: \(decodingGain)x")
108+
//}
83109

84110
exit(result)

Tests/Base64KitTests/ChromiumTests.swift

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,33 @@ class ChromiumTests: XCTestCase {
66

77
func testEncodeEmptyData() {
88
let data = [UInt8]()
9-
let encodedData = Base64.encodeChromium(bytes: data)
9+
let encodedData: [UInt8] = Base64.encodeChromium(bytes: data)
1010
XCTAssertEqual(encodedData.count, 0)
1111
}
1212

1313
func testBase64EncodingArrayOfNulls() {
1414
let data = Array(repeating: UInt8(0), count: 10)
15-
let encodedData = Base64.encodeChromium(bytes: data)
15+
let encodedData: [UInt8] = Base64.encodeChromium(bytes: data)
1616
XCTAssertEqual(encodedData, [UInt8]("AAAAAAAAAAAAAA==".utf8))
1717
}
1818

1919
func testBase64EncodingAllTheBytesSequentially() {
2020
let data = Array(UInt8(0) ... UInt8(255))
21-
let encodedData = Base64.encodeChromium(bytes: data)
21+
let encodedData: [UInt8] = Base64.encodeChromium(bytes: data)
2222
XCTAssertEqual(encodedData, [UInt8]("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==".utf8))
2323
}
2424

2525
func testBase64UrlEncodingAllTheBytesSequentially() {
2626
let data = Array(UInt8(0) ... UInt8(255))
27-
let encodedData = Base64.encodeChromium(bytes: data, options: .base64UrlAlphabet)
27+
let encodedData: [UInt8] = Base64.encodeChromium(bytes: data, options: .base64UrlAlphabet)
2828
XCTAssertEqual(encodedData, [UInt8]("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w==".utf8))
2929
}
30+
31+
func testBase64UrlEncodingAllTheBytesSequentiallyOmitPadding() {
32+
let data = Array(UInt8(0) ... UInt8(255))
33+
let encodedData: [UInt8] = Base64.encodeChromium(bytes: data, options: [.base64UrlAlphabet, .omitPaddingCharacter])
34+
XCTAssertEqual(encodedData, [UInt8]("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w".utf8))
35+
}
3036

3137
// MARK: Decoding
3238

@@ -59,7 +65,17 @@ class ChromiumTests: XCTestCase {
5965

6066
let expected = Array(UInt8(0) ... UInt8(255))
6167
var decoded: [UInt8]?
62-
XCTAssertNoThrow(decoded = try base64.base64decoded(options: .base64UrlAlphabet))
68+
XCTAssertNoThrow(decoded = try Base64.decodeChromium(string: base64, options: .base64UrlAlphabet))
69+
70+
XCTAssertEqual(decoded, expected)
71+
}
72+
73+
func testBase64UrlDecodingAllTheBytesSequentiallyOmitPadding() {
74+
let base64 = "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w"
75+
76+
let expected = Array(UInt8(0) ... UInt8(255))
77+
var decoded: [UInt8]?
78+
XCTAssertNoThrow(decoded = try Base64.decodeChromium(string: base64, options: [.base64UrlAlphabet, .omitPaddingCharacter]))
6379

6480
XCTAssertEqual(decoded, expected)
6581
}

Tests/Base64KitTests/DecodingTests.swift

Lines changed: 0 additions & 56 deletions
This file was deleted.

Tests/Base64KitTests/EncodingTests.swift

Lines changed: 0 additions & 28 deletions
This file was deleted.

Tests/Base64KitTests/IntegrationTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import XCTest
44
class IntegrationTests: XCTestCase {
55
func testEncodeAndDecodingĨ() throws {
66
var input = "Ĩ"
7-
let output = try input.withUTF8 { (ptr) -> String in
8-
let bytes = String(base64Encoding: ptr)
9-
let decoded = try bytes.base64decoded()
10-
11-
return String(bytes: decoded, encoding: .utf8)!
7+
let encoded = input.withUTF8 { (ptr) -> String in
8+
Base64.encodeChromium(bytes: ptr)
129
}
10+
11+
let decoded = try Base64.decodeChromium(string: encoded)
12+
let output = String(decoding: decoded, as: Unicode.UTF8.self)
1313

1414
XCTAssertEqual(input, output)
1515
}

0 commit comments

Comments
 (0)