///|
pub struct BenchmarkReport {
input_bytes : Int
iterations : Int
successes : Int
fields : Int
operations : Int
elapsed_micros : Int
} derive(Debug, Eq)
///|
fn benchmark_parse_one(input : String) -> GS1Message? {
Some(parse_gs1(input)) catch {
_ => None
}
}
///|
pub fn benchmark_parse(input : String, iterations~ : Int) -> BenchmarkReport {
let mut successes = 0
let mut fields = 0
let mut operations = 0
for _ in 0.. {
successes = successes + 1
fields = fields + message.elements.length()
operations = operations + input.length() + message.elements.length() * 4
}
None => operations = operations + input.length()
}
}
{
input_bytes: input.length(),
iterations,
successes,
fields,
operations,
elapsed_micros: 0,
}
}
///|
pub fn BenchmarkReport::success_rate(self : BenchmarkReport) -> Int {
if self.iterations == 0 {
0
} else {
self.successes * 100 / self.iterations
}
}
///|
pub fn BenchmarkReport::summary(self : BenchmarkReport) -> String {
"iterations=\{self.iterations}; successes=\{self.successes}; fields=\{self.fields}; operations=\{self.operations}"
}