mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
AK: Add human_readable_short_time()
This gives a more compact version of `human_readable_time()` to nanosecond precision.
This commit is contained in:
parent
c845e2cef7
commit
298e934077
Notes:
github-actions[bot]
2025-11-11 10:49:06 +00:00
Author: https://github.com/tcl3
Commit: 298e934077
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6768
Reviewed-by: https://github.com/Hendiadyoin1
Reviewed-by: https://github.com/gmta ✅
3 changed files with 100 additions and 0 deletions
|
|
@ -104,6 +104,51 @@ String human_readable_time(Duration duration)
|
|||
return MUST(builder.to_string());
|
||||
}
|
||||
|
||||
String human_readable_short_time(Duration duration)
|
||||
{
|
||||
auto nanoseconds = duration.to_nanoseconds();
|
||||
if (nanoseconds < 1'000)
|
||||
return MUST(String::formatted("{}ns", nanoseconds));
|
||||
if (nanoseconds < 1'000'000)
|
||||
return MUST(String::formatted("{:.3}µs", static_cast<double>(nanoseconds) / 1'000.0));
|
||||
if (nanoseconds < 1'000'000'000)
|
||||
return MUST(String::formatted("{:.3}ms", static_cast<double>(nanoseconds) / 1'000'000.0));
|
||||
if (nanoseconds < 60'000'000'000)
|
||||
return MUST(String::formatted("{:.3}s", static_cast<double>(nanoseconds) / 1'000'000'000.0));
|
||||
|
||||
auto days = nanoseconds / 86'400'000'000'000;
|
||||
nanoseconds = nanoseconds % 86'400'000'000'000;
|
||||
auto hours = nanoseconds / 3'600'000'000'000;
|
||||
nanoseconds = nanoseconds % 3'600'000'000'000;
|
||||
auto minutes = nanoseconds / 60'000'000'000;
|
||||
nanoseconds = nanoseconds % 60'000'000'000;
|
||||
auto seconds = static_cast<double>(nanoseconds) / 1'000'000'000.0;
|
||||
|
||||
StringBuilder builder;
|
||||
if (days > 0)
|
||||
builder.appendff("{}d", days);
|
||||
|
||||
if (hours > 0) {
|
||||
if (!builder.is_empty())
|
||||
builder.append(' ');
|
||||
builder.appendff("{}h", hours);
|
||||
}
|
||||
|
||||
if (minutes > 0) {
|
||||
if (!builder.is_empty())
|
||||
builder.append(' ');
|
||||
builder.appendff("{}m", minutes);
|
||||
}
|
||||
|
||||
if (seconds > 0.0) {
|
||||
if (!builder.is_empty())
|
||||
builder.append(' ');
|
||||
builder.appendff("{:.3}s", seconds);
|
||||
}
|
||||
|
||||
return MUST(builder.to_string());
|
||||
}
|
||||
|
||||
String human_readable_digital_time(i64 time_in_seconds)
|
||||
{
|
||||
auto hours = time_in_seconds / 3600;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ String human_readable_quantity(u64 quantity, HumanReadableBasedOn based_on = Hum
|
|||
|
||||
String human_readable_size_long(u64 size, UseThousandsSeparator use_thousands_separator = UseThousandsSeparator::No);
|
||||
String human_readable_time(Duration);
|
||||
String human_readable_short_time(Duration);
|
||||
String human_readable_digital_time(i64 time_in_seconds);
|
||||
|
||||
}
|
||||
|
|
@ -33,6 +34,7 @@ String human_readable_digital_time(i64 time_in_seconds);
|
|||
#if USING_AK_GLOBALLY
|
||||
using AK::human_readable_digital_time;
|
||||
using AK::human_readable_quantity;
|
||||
using AK::human_readable_short_time;
|
||||
using AK::human_readable_size;
|
||||
using AK::human_readable_size_long;
|
||||
using AK::human_readable_time;
|
||||
|
|
|
|||
|
|
@ -133,3 +133,56 @@ TEST_CASE(base10_units)
|
|||
EXPECT_EQ(human_readable_size(1100, AK::HumanReadableBasedOn::Base10), "1.1 KB");
|
||||
EXPECT_EQ(human_readable_size(1000000, AK::HumanReadableBasedOn::Base10), "1.0 MB");
|
||||
}
|
||||
|
||||
TEST_CASE(human_readable_short_time)
|
||||
{
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(0)), "0ns");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(1)), "1ns");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(99)), "99ns");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(999)), "999ns");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(1009)), "1.009µs");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(1099)), "1.099µs");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_nanoseconds(1999)), "1.999µs");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(1)), "1µs");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(999)), "999µs");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(1009)), "1.009ms");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(1099)), "1.099ms");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(1999)), "1.999ms");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1)), "1ms");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(99)), "99ms");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(999)), "999ms");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1009)), "1.009s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1099)), "1.099s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1999)), "1.999s");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(1)), "1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1001)), "1.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(1999)), "1.999s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(59)), "59s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(59999)), "59.999s");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(60)), "1m");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(60001)), "1m 0.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(61)), "1m 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(61001)), "1m 1.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(61001001)), "1m 1.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(3599)), "59m 59s");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(3600)), "1h");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(3601)), "1h 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(3600001)), "1h 0.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_microseconds(3601001001)), "1h 1.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(3661)), "1h 1m 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(3661)), "1h 1m 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(86399)), "23h 59m 59s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(86399001)), "23h 59m 59.001s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(86399999)), "23h 59m 59.999s");
|
||||
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(86400)), "1d");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(86401)), "1d 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(86461)), "1d 1m 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_seconds(90061)), "1d 1h 1m 1s");
|
||||
EXPECT_EQ(human_readable_short_time(AK::Duration::from_milliseconds(90061001)), "1d 1h 1m 1.001s");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue