Created StressTests.testMeasureAsyncDecoding test case

This commit is contained in:
Caleb Kleveter 2019-04-19 09:38:15 -05:00
parent cc8f568e21
commit 45de8e19cb
No known key found for this signature in database
GPG Key ID: B38DBD5CF2C98D69
2 changed files with 153 additions and 2 deletions

View File

@ -266,7 +266,7 @@ class CSVTests: XCTestCase {
("testBytesToStringSpeed", testBytesToStringSpeed)
]
func compare(_ lhs: Response?, to rhs: Response?) {
fileprivate func compare(_ lhs: Response?, to rhs: Response?) {
XCTAssertEqual(lhs?.Respondent, rhs?.Respondent)
XCTAssertEqual(lhs?.Hobby, rhs?.Hobby)
XCTAssertEqual(lhs?.OpenSource, rhs?.OpenSource)
@ -399,7 +399,7 @@ class CSVTests: XCTestCase {
}
}
struct Response: Codable, Equatable {
fileprivate struct Response: Codable, Equatable {
static func makeKeys(from row: [String: [[UInt8]?]]) -> [CodingKey] {
// return row.compactMap { cell in return Response.CodingKeys.init(stringValue: cell.key) }
return Array(row.keys).compactMap(Response.CodingKeys.init)

View File

@ -2,6 +2,7 @@ import XCTest
import CSV
final class StressTests: XCTestCase {
let codingOptions = CSVCodingOptions(boolCodingStrategy: .fuzzy, nilCodingStrategy: .custom([78, 65]))
let data: Data = {
let string: String
if let envVar = ProcessInfo.processInfo.environment["CSV_STRESS_TEST_DATA"] { string = "file:" + envVar }
@ -55,4 +56,154 @@ final class StressTests: XCTestCase {
_ = serializer.serialize(parsed)
}
}
func testMeasureAsyncDecoding() {
let decoder = CSVDecoder(decodingOptions: self.codingOptions)
// Baseline: 14.347
measure {
do {
let async = decoder.async(
for: Response.self,
length: self.data.count,
{ _ in return }
)
try async.decode(data)
} catch let error {
XCTFail(error.localizedDescription)
}
}
}
}
fileprivate struct Response: Codable, Equatable {
let Respondent: Int
let Hobby: Bool
let OpenSource: Bool
let Country: String
let Student: String
let Employment: String
let FormalEducation: String
let UndergradMajor: String?
let CompanySize: String
let DevType: String
let YearsCoding: String
let YearsCodingProf: String?
let JobSatisfaction: String?
let CareerSatisfaction: String?
let HopeFiveYears: String?
let JobSearchStatus: String?
let LastNewJob: String?
let AssessJob1: Int?
let AssessJob2: Int?
let AssessJob3: Int?
let AssessJob4: Int?
let AssessJob5: Int?
let AssessJob6: Int?
let AssessJob7: Int?
let AssessJob8: Int?
let AssessJob9: Int?
let AssessJob10: Int?
let AssessBenefits1: Int?
let AssessBenefits2: Int?
let AssessBenefits3: Int?
let AssessBenefits4: Int?
let AssessBenefits5: Int?
let AssessBenefits6: Int?
let AssessBenefits7: Int?
let AssessBenefits8: Int?
let AssessBenefits9: Int?
let AssessBenefits10: Int?
let AssessBenefits11: Int?
let JobContactPriorities1: Int?
let JobContactPriorities2: Int?
let JobContactPriorities3: Int?
let JobContactPriorities4: Int?
let JobContactPriorities5: Int?
let JobEmailPriorities1: Int?
let JobEmailPriorities2: Int?
let JobEmailPriorities3: Int?
let JobEmailPriorities4: Int?
let JobEmailPriorities5: Int?
let JobEmailPriorities6: Int?
let JobEmailPriorities7: Int?
let UpdateCV: String?
let Currency: String?
let Salary: Float?
let SalaryType: String?
let ConvertedSalary: String?
let CurrencySymbol: String?
let CommunicationTools: String?
let TimeFullyProductive: String?
let EducationTypes: String?
let SelfTaughtTypes: String?
let TimeAfterBootcamp: String?
let HackathonReasons: String?
let AgreeDisagree1: String?
let AgreeDisagree2: String?
let AgreeDisagree3: String?
let LanguageWorkedWith: String?
let LanguageDesireNextYear: String?
let DatabaseWorkedWith: String?
let DatabaseDesireNextYear: String?
let PlatformWorkedWith: String?
let PlatformDesireNextYear: String?
let FrameworkWorkedWith: String?
let FrameworkDesireNextYear: String?
let IDE: String?
let OperatingSystem: String?
let NumberMonitors: String?
let Methodology: String?
let VersionControl: String?
let CheckInCode: String?
let AdBlocker: String?
let AdBlockerDisable: String?
let AdBlockerReasons: String?
let AdsAgreeDisagree1: String?
let AdsAgreeDisagree2: String?
let AdsAgreeDisagree3: String?
let AdsActions: String?
let AdsPriorities1: Int?
let AdsPriorities2: Int?
let AdsPriorities3: Int?
let AdsPriorities4: Int?
let AdsPriorities5: Int?
let AdsPriorities6: Int?
let AdsPriorities7: Int?
let AIDangerous: String?
let AIInteresting: String?
let AIResponsible: String?
let AIFuture: String?
let EthicsChoice: String?
let EthicsReport: String?
let EthicsResponsible: String?
let EthicalImplications: String?
let StackOverflowRecommend: String?
let StackOverflowVisit: String?
let StackOverflowHasAccount: String?
let StackOverflowParticipate: String?
let StackOverflowJobs: String?
let StackOverflowDevStory: String?
let StackOverflowJobsRecommend: String?
let StackOverflowConsiderMember: String?
let HypotheticalTools1: String?
let HypotheticalTools2: String?
let HypotheticalTools3: String?
let HypotheticalTools4: String?
let HypotheticalTools5: String?
let WakeTime: String?
let HoursComputer: String?
let HoursOutside: String?
let SkipMeals: String?
let ErgonomicDevices: String?
let Exercise: String?
let Gender: String?
let SexualOrientation: String?
let EducationParents: String?
let RaceEthnicity: String?
let Age: String?
let Dependents: Bool?
let MilitaryUS: Bool?
let SurveyTooLong: String?
let SurveyEasy: String
}