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
|
import XCTest
|
||||||
@testable import CSV
|
@testable import CSV
|
||||||
|
|
||||||
|
@ -42,9 +43,29 @@ class CSVTests: XCTestCase {
|
||||||
XCTAssertEqual(fielders[0], Fielder(playerID: "abercda01", yearID: 1871, teamID: "TRO"))
|
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 = [
|
static var allTests = [
|
||||||
("testSpeed", testSpeed),
|
("testSpeed", testSpeed),
|
||||||
("testRowSpeed", testRowSpeed)
|
("testRowSpeed", testRowSpeed),
|
||||||
|
("testCSVDecode", testCSVDecode),
|
||||||
|
("testCSVColumnSeralization", testCSVColumnSeralization),
|
||||||
|
("testCSVColumnSeralizationSpeed", testCSVColumnSeralizationSpeed)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue