Merge pull request #960 from sharkdp/codex/time-unit-aliases

Support minutes, hours, and time unit aliases
This commit is contained in:
David Peter authored and GitHub committed 2026-10-05 10:27:09 +02:00
commit fbdb75efc3
5 files changed
+41 -10

No files matched your search

+15 -2
View File
@@ -255,8 +255,21 @@ order benchmarks by mean runtime
.HP .HP
\fB\-u\fR, \fB\-\-time\-unit\fR \fIUNIT\fP \fB\-u\fR, \fB\-\-time\-unit\fR \fIUNIT\fP
.IP .IP
Set the time unit to be used. Possible values: microsecond, millisecond, second. If Set the time unit to be used. If the option is not given, the time unit is
the option is not given, the time unit is determined automatically. determined automatically. Possible values:
.RS
.IP "microsecond"
Aliases: µs, us, microseconds.
.IP "millisecond"
Aliases: ms, milliseconds.
.IP "second"
Aliases: s, seconds.
.IP "minute"
Aliases: min, minutes.
.IP "hour"
Aliases: h, hours.
.RE
.IP
This option affects the standard output as well as all export formats This option affects the standard output as well as all export formats
except for CSV and JSON. except for CSV and JSON.
.HP .HP
+9 -4
View File
@@ -278,10 +278,15 @@ fn build_command() -> Command {
.short('u') .short('u')
.action(ArgAction::Set) .action(ArgAction::Set)
.value_name("UNIT") .value_name("UNIT")
.value_parser(["microsecond", "millisecond", "second"]) .value_parser(["µs", "us", "microsecond", "microseconds", "ms", "millisecond", "milliseconds", "s", "second", "seconds", "min", "minute", "minutes", "h", "hour", "hours"])
.help("Set the time unit to be used. Possible values: microsecond, millisecond, second. \ .help("Set the time unit to be used. If the option is not given, the time unit is determined automatically. \
If the option is not given, the time unit is determined automatically. \ This option affects the standard output as well as all export formats except for CSV and JSON.\n\
This option affects the standard output as well as all export formats except for CSV and JSON."), Possible values:\n \
* 'µs', 'us', 'microsecond', 'microseconds'\n \
* 'ms', 'millisecond', 'milliseconds'\n \
* 's', 'second', 'seconds'\n \
* 'min', 'minute', 'minutes'\n \
* 'h', 'hour', 'hours'"),
) )
.arg( .arg(
Arg::new("export-asciidoc") Arg::new("export-asciidoc")
+5 -3
View File
@@ -429,9 +429,11 @@ impl Options {
} }
options.time_unit = match matches.get_one::<String>("time-unit").map(|s| s.as_str()) { options.time_unit = match matches.get_one::<String>("time-unit").map(|s| s.as_str()) {
Some("microsecond") => Some(Unit::MicroSecond), Some("µs" | "us" | "microsecond" | "microseconds") => Some(Unit::MicroSecond),
Some("millisecond") => Some(Unit::MilliSecond), Some("ms" | "millisecond" | "milliseconds") => Some(Unit::MilliSecond),
Some("second") => Some(Unit::Second), Some("s" | "second" | "seconds") => Some(Unit::Second),
Some("min" | "minute" | "minutes") => Some(Unit::Minute),
Some("h" | "hour" | "hours") => Some(Unit::Hour),
_ => None, _ => None,
}; };
+2 -1
View File
@@ -21,7 +21,8 @@ pub fn format_duration_value(duration: Second, unit: Option<Unit>) -> (String, U
} else if (duration < 1.0 && unit.is_none()) || unit == Some(Unit::MilliSecond) { } else if (duration < 1.0 && unit.is_none()) || unit == Some(Unit::MilliSecond) {
(Unit::MilliSecond.format(duration), Unit::MilliSecond) (Unit::MilliSecond.format(duration), Unit::MilliSecond)
} else { } else {
(Unit::Second.format(duration), Unit::Second) let unit = unit.unwrap_or(Unit::Second);
(unit.format(duration), unit)
} }
} }
+10
View File
@@ -11,6 +11,8 @@ pub enum Unit {
Second, Second,
MilliSecond, MilliSecond,
MicroSecond, MicroSecond,
Minute,
Hour,
} }
impl Unit { impl Unit {
@@ -20,6 +22,8 @@ impl Unit {
Unit::Second => String::from("s"), Unit::Second => String::from("s"),
Unit::MilliSecond => String::from("ms"), Unit::MilliSecond => String::from("ms"),
Unit::MicroSecond => String::from("µs"), Unit::MicroSecond => String::from("µs"),
Unit::Minute => String::from("min"),
Unit::Hour => String::from("h"),
} }
} }
@@ -29,6 +33,8 @@ impl Unit {
Unit::Second => format!("{value:.3}"), Unit::Second => format!("{value:.3}"),
Unit::MilliSecond => format!("{:.1}", value * 1e3), Unit::MilliSecond => format!("{:.1}", value * 1e3),
Unit::MicroSecond => format!("{:.1}", value * 1e6), Unit::MicroSecond => format!("{:.1}", value * 1e6),
Unit::Minute => format!("{:.1}", value / 60.0),
Unit::Hour => format!("{:.1}", value / 3600.0),
} }
} }
} }
@@ -38,6 +44,8 @@ fn test_unit_short_name() {
assert_eq!("s", Unit::Second.short_name()); assert_eq!("s", Unit::Second.short_name());
assert_eq!("ms", Unit::MilliSecond.short_name()); assert_eq!("ms", Unit::MilliSecond.short_name());
assert_eq!("µs", Unit::MicroSecond.short_name()); assert_eq!("µs", Unit::MicroSecond.short_name());
assert_eq!("min", Unit::Minute.short_name());
assert_eq!("h", Unit::Hour.short_name());
} }
// Note - the values are rounded when formatted. // Note - the values are rounded when formatted.
@@ -48,4 +56,6 @@ fn test_unit_format() {
assert_eq!("123456.8", Unit::MilliSecond.format(value)); assert_eq!("123456.8", Unit::MilliSecond.format(value));
assert_eq!("1234.6", Unit::MicroSecond.format(0.00123456)); assert_eq!("1234.6", Unit::MicroSecond.format(0.00123456));
assert_eq!("2.1", Unit::Minute.format(value));
assert_eq!("0.0", Unit::Hour.format(value));
} }