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: *Writeroptions: std.fmt.Options

Possible Errors

WriteFailed

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); }