Switch to unit-safe quantities

This commit is contained in:
David Peter authored and David Peter committed 2026-10-05 15:58:56 +02:00
1 parent 914d5cbc59
commit f9aa299c0f
15 files changed
+399 -287

No files matched your search

+28 -37
View File
@@ -4,6 +4,7 @@ use csv::WriterBuilder;
use super::Exporter;
use crate::benchmark::benchmark_result::BenchmarkResult;
use crate::benchmark::quantity::Second;
use crate::options::SortOrder;
use crate::quantity::{FormatQuantity, TimeUnit};
@@ -45,17 +46,14 @@ impl Exporter for CsvExporter {
let mut fields = vec![Cow::Borrowed(res.command.as_bytes())];
for f in &[
res.mean_wall_clock_time(),
res.measurements.stddev().unwrap_or(0.0),
res.measurements.stddev().unwrap_or_default(),
res.measurements.median(),
res.measurements.user_mean(),
res.measurements.system_mean(),
res.measurements.min(),
res.measurements.max(),
] {
fields.push(Cow::Owned(
f.format_with_precision(CSV_UNIT, CSV_PRECISION)
.into_bytes(),
))
fields.push(Cow::Owned(f.value_in::<Second>().to_string().into_bytes()))
}
for v in res.parameters.values() {
fields.push(Cow::Borrowed(v.value.as_bytes()))
@@ -67,20 +65,13 @@ impl Exporter for CsvExporter {
}
}
#[cfg(test)]
use crate::benchmark::benchmark_result::Parameter;
#[cfg(test)]
use crate::benchmark::measurement::{Measurement, Measurements};
#[test]
fn test_csv() {
use crate::benchmark::benchmark_result::Parameter;
use crate::benchmark::measurement::{Measurement, Measurements};
use crate::quantity::{byte, second, Information, Time, Zero};
use crate::benchmark::quantity::{Byte, Second};
use std::collections::BTreeMap;
use std::process::ExitStatus;
let exporter = CsvExporter::default();
@@ -89,24 +80,24 @@ fn test_csv() {
command: String::from("command_a"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 7.0,
user_time: 7.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(7.0),
user_time: Second::new(7.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 8.0,
user_time: 8.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(8.0),
user_time: Second::new(8.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 12.0,
user_time: 12.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(12.0),
user_time: Second::new(12.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -133,24 +124,24 @@ fn test_csv() {
command: String::from("command_b"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 17.0,
user_time: 17.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(17.0),
user_time: Second::new(17.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 18.0,
user_time: 18.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(18.0),
user_time: Second::new(18.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 19.0,
user_time: 19.0,
system_time: 0.0,
memory_usage_byte: 1024,
wall_clock_time: Second::new(19.0),
user_time: Second::new(19.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
+97 -96
View File
@@ -1,6 +1,7 @@
use super::Exporter;
use crate::benchmark::benchmark_result::BenchmarkResult;
use crate::benchmark::measurement::{Measurement, Measurements};
use crate::benchmark::quantity::{Byte, Second};
use crate::export::asciidoc::AsciidocExporter;
use crate::export::orgmode::OrgmodeExporter;
use crate::quantity::{byte, second, Information, Time, TimeUnit, Zero};
@@ -30,24 +31,24 @@ fn test_markup_export_auto_ms() {
command: String::from("sleep 0.1"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 0.09,
user_time: 0.09,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.09),
user_time: Second::new(0.09),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.10,
user_time: 0.10,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.10),
user_time: Second::new(0.10),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.14,
user_time: 0.14,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.14),
user_time: Second::new(0.14),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -57,24 +58,24 @@ fn test_markup_export_auto_ms() {
command: String::from("sleep 2"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 2.0,
user_time: 2.0,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.0),
user_time: Second::new(2.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 3.0,
user_time: 3.0,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(3.0),
user_time: Second::new(3.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 4.0,
user_time: 4.0,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(4.0),
user_time: Second::new(4.0),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -129,24 +130,24 @@ fn test_markup_export_auto_s() {
command: String::from("sleep 2"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 2.1,
user_time: 2.1,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.1),
user_time: Second::new(2.1),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.2,
user_time: 2.2,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.2),
user_time: Second::new(2.2),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.3,
user_time: 2.3,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.3),
user_time: Second::new(2.3),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -156,24 +157,24 @@ fn test_markup_export_auto_s() {
command: String::from("sleep 0.1"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 0.1,
user_time: 0.1,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.1),
user_time: Second::new(0.1),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.2,
user_time: 0.2,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.2),
user_time: Second::new(0.2),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.3,
user_time: 0.3,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.3),
user_time: Second::new(0.3),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -228,24 +229,24 @@ fn test_markup_export_manual_ms() {
command: String::from("sleep 2"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 2.1,
user_time: 2.1,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.1),
user_time: Second::new(2.1),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.2,
user_time: 2.2,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.2),
user_time: Second::new(2.2),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.3,
user_time: 2.3,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.3),
user_time: Second::new(2.3),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -255,24 +256,24 @@ fn test_markup_export_manual_ms() {
command: String::from("sleep 0.1"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 0.1,
user_time: 0.1,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.1),
user_time: Second::new(0.1),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.2,
user_time: 0.2,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.2),
user_time: Second::new(0.2),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.3,
user_time: 0.3,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.3),
user_time: Second::new(0.3),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -326,24 +327,24 @@ fn test_markup_export_manual_s() {
command: String::from("sleep 2"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 2.01,
user_time: 2.01,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.01),
user_time: Second::new(2.01),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.02,
user_time: 2.02,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.02),
user_time: Second::new(2.02),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 2.03,
user_time: 2.03,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(2.03),
user_time: Second::new(2.03),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),
@@ -353,24 +354,24 @@ fn test_markup_export_manual_s() {
command: String::from("sleep 0.1"),
measurements: Measurements::new(vec![
Measurement {
wall_clock_time: 0.11,
user_time: 0.11,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.11),
user_time: Second::new(0.11),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.12,
user_time: 0.12,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.12),
user_time: Second::new(0.12),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
Measurement {
wall_clock_time: 0.13,
user_time: 0.13,
system_time: 0.,
memory_usage_byte: 1024,
wall_clock_time: Second::new(0.13),
user_time: Second::new(0.13),
system_time: Second::zero(),
memory_usage_byte: Byte::new(1024),
exit_code: Some(0),
},
]),