mirror of
https://github.com/sharkdp/hyperfine.git
synced 2026-11-02 01:00:31 +00:00
Support minutes, hours, and time unit aliases
This commit is contained in:
1 parent
16e23a1b42
commit
84ff04f35d
6 files changed
+42
-10
No files matched your search
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
- Add minutes and hours to `--time-unit`, along with abbreviated and plural unit names such as `ms`, `min`, and `hours` (@sharkdp)
|
||||||
- Add `--reference-name` option to give a meaningful name to the reference command, see #808 (@niklasdewally)
|
- Add `--reference-name` option to give a meaningful name to the reference command, see #808 (@niklasdewally)
|
||||||
- The `--ignore-failure` option now supports a comma-separated list of exit codes to ignore (e.g., `--ignore-failure=1,2`), see #836 (@sharkdp)
|
- The `--ignore-failure` option now supports a comma-separated list of exit codes to ignore (e.g., `--ignore-failure=1,2`), see #836 (@sharkdp)
|
||||||
- Python scripts: Add `--time-unit` option to `advanced_statistics.py` (@sharkdp)
|
- Python scripts: Add `--time-unit` option to `advanced_statistics.py` (@sharkdp)
|
||||||
|
|||||||
+15
-2
@@ -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
@@ -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
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user