Created Array<CSV.Column>.seralize() method

This commit is contained in:
Caleb Kleveter 2018-05-07 09:46:40 -05:00
parent 64ee6081f2
commit 5cdb75a49c
No known key found for this signature in database
GPG Key ID: 30A5A6F3A0ED7EDA
2 changed files with 57 additions and 1 deletions

View File

@ -0,0 +1,35 @@
import Foundation
import Bits
extension Array where Element == CSV.Column {
func seralize() -> Data {
guard let count = self.first?.fields.count else {
return self.map { $0.header.data }.joined(separator: .comma)
}
var index = 0
var data: [Data] = [self.map { $0.header.data }.joined(separator: .comma)]
while index < count {
data.append(self.map { ($0.fields[index] ?? "").data }.joined(separator: .comma))
index += 1
}
return data.joined(separator: .newLine)
}
}
extension String {
var data: Data {
return Data(self.utf8)
}
}
extension Array where Element == Data {
func joined(separator: UInt8) -> Element {
return self.reduce(into: Data()) { data, subsequence in
if data.count > 0 { data.append(separator) }
data.append(contentsOf: subsequence)
}
}
}

View File

@ -1,3 +1,4 @@
import Bits
import XCTest
@testable import CSV
@ -42,9 +43,29 @@ class CSVTests: XCTestCase {
XCTAssertEqual(fielders[0], Fielder(playerID: "abercda01", yearID: 1871, teamID: "TRO"))
}
func testCSVColumnSeralization()throws {
let url = URL(string: "file:/Users/calebkleveter/Development/Fielding.csv")!
let data = try Data(contentsOf: url)
let parsed: [CSV.Column] = CSV.parse(data)
let _ = parsed.seralize()
}
func testCSVColumnSeralizationSpeed()throws {
let url = URL(string: "file:/Users/calebkleveter/Development/Fielding.csv")!
let data = try Data(contentsOf: url)
let parsed: [CSV.Column] = CSV.parse(data)
measure {
_ = parsed.seralize()
}
}
static var allTests = [
("testSpeed", testSpeed),
("testRowSpeed", testRowSpeed)
("testRowSpeed", testRowSpeed),
("testCSVDecode", testCSVDecode),
("testCSVColumnSeralization", testCSVColumnSeralization),
("testCSVColumnSeralizationSpeed", testCSVColumnSeralizationSpeed)
]
}