Created Array<CSV.Column>.seralize() method
This commit is contained in:
parent
64ee6081f2
commit
5cdb75a49c
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
]
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue