Function printDuration [src]
Writes number of nanoseconds according to its signed magnitude:
[#y][#w][#d][#h][#m]#[.###][n|u|m]s
nanoseconds must be an integer that coerces into u64 or i64.
Prototype
pub fn printDuration(w: *Writer, nanoseconds: anytype, options: std.fmt.Options) Error!void
Parameters
w: *Writer
options: std.fmt.Options
Possible Errors
See the Writer
implementation for detailed diagnostics.
Example
test printDuration {
try testDurationCase("0ns", 0);
try testDurationCase("1ns", 1);
try testDurationCase("999ns", std.time.ns_per_us - 1);
try testDurationCase("1us", std.time.ns_per_us);
try testDurationCase("1.45us", 1450);
try testDurationCase("1.5us", 3 * std.time.ns_per_us / 2);
try testDurationCase("14.5us", 14500);
try testDurationCase("145us", 145000);
try testDurationCase("999.999us", std.time.ns_per_ms - 1);
try testDurationCase("1ms", std.time.ns_per_ms + 1);
try testDurationCase("1.5ms", 3 * std.time.ns_per_ms / 2);
try testDurationCase("1.11ms", 1110000);
try testDurationCase("1.111ms", 1111000);
try testDurationCase("1.111ms", 1111100);
try testDurationCase("999.999ms", std.time.ns_per_s - 1);
try testDurationCase("1s", std.time.ns_per_s);
try testDurationCase("59.999s", std.time.ns_per_min - 1);
try testDurationCase("1m", std.time.ns_per_min);
try testDurationCase("1h", std.time.ns_per_hour);
try testDurationCase("1d", std.time.ns_per_day);
try testDurationCase("1w", std.time.ns_per_week);
try testDurationCase("1y", 365 * std.time.ns_per_day);
try testDurationCase("1y52w23h59m59.999s", 730 * std.time.ns_per_day - 1); // 365d = 52w1
try testDurationCase("1y1h1.001s", 365 * std.time.ns_per_day + std.time.ns_per_hour + std.time.ns_per_s + std.time.ns_per_ms);
try testDurationCase("1y1h1s", 365 * std.time.ns_per_day + std.time.ns_per_hour + std.time.ns_per_s + 999 * std.time.ns_per_us);
try testDurationCase("1y1h999.999us", 365 * std.time.ns_per_day + std.time.ns_per_hour + std.time.ns_per_ms - 1);
try testDurationCase("1y1h1ms", 365 * std.time.ns_per_day + std.time.ns_per_hour + std.time.ns_per_ms);
try testDurationCase("1y1h1ms", 365 * std.time.ns_per_day + std.time.ns_per_hour + std.time.ns_per_ms + 1);
try testDurationCase("1y1m999ns", 365 * std.time.ns_per_day + std.time.ns_per_min + 999);
try testDurationCase("584y49w23h34m33.709s", std.math.maxInt(u64));
try testing.expectFmt("=======0ns", "{D:=>10}", .{0});
try testing.expectFmt("1ns=======", "{D:=<10}", .{1});
try testing.expectFmt(" 999ns ", "{D:^10}", .{std.time.ns_per_us - 1});
}
Source
pub fn printDuration(w: *Writer, nanoseconds: anytype, options: std.fmt.Options) Error!void {
// worst case: "-XXXyXXwXXdXXhXXmXX.XXXs".len = 24
var buf: [24]u8 = undefined;
var sub_writer: Writer = .fixed(&buf);
if (@TypeOf(nanoseconds) == comptime_int) {
if (nanoseconds >= 0) {
sub_writer.printDurationUnsigned(nanoseconds) catch unreachable;
} else {
sub_writer.printDurationSigned(nanoseconds) catch unreachable;
}
} else switch (@typeInfo(@TypeOf(nanoseconds)).int.signedness) {
.signed => sub_writer.printDurationSigned(nanoseconds) catch unreachable,
.unsigned => sub_writer.printDurationUnsigned(nanoseconds) catch unreachable,
}
return w.alignBufferOptions(sub_writer.buffered(), options);
}