diff options
Diffstat (limited to 'src/zencore/string.cpp')
| -rw-r--r-- | src/zencore/string.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/zencore/string.cpp b/src/zencore/string.cpp index 34519b83b..4072aec56 100644 --- a/src/zencore/string.cpp +++ b/src/zencore/string.cpp @@ -482,6 +482,24 @@ NiceTimeSpanMsToBuffer(uint64_t Millis, std::span<char> Buffer) } } +size_t +NiceTimeSpanUsToBuffer(uint64_t Micros, std::span<char> Buffer) +{ + if (Micros < 1000) + { + return snprintf(Buffer.data(), Buffer.size(), "%" PRIu64 "us", Micros); + } + else if (Micros < 10000) + { + return snprintf(Buffer.data(), Buffer.size(), "%.2fms", Micros / 1000.0); + } + else if (Micros < 1000000) + { + return snprintf(Buffer.data(), Buffer.size(), "%.1fms", Micros / 1000.0); + } + return NiceTimeSpanMsToBuffer(Micros / 1000, Buffer); +} + ////////////////////////////////////////////////////////////////////////// template<typename C> @@ -850,6 +868,13 @@ TEST_CASE("niceNum") NiceNumGeneral(100000000000000, Buffer, kNicenumTime); CHECK(StringEquals(Buffer, "100000s")); + + // floor() instead of round(): 999.5us must NOT render as "1000us". + NiceNumGeneral(999500, Buffer, kNicenumTime); + CHECK(StringEquals(Buffer, "999us")); + + NiceNumGeneral(999999, Buffer, kNicenumTime); + CHECK(StringEquals(Buffer, "999us")); } SUBCASE("bytes") @@ -917,6 +942,43 @@ TEST_CASE("niceNum") NiceTimeSpanMsToBuffer(360000000, Buffer); CHECK(StringEquals(Buffer, "100h00m")); } + + SUBCASE("timespan_us") + { + NiceTimeSpanUsToBuffer(0, Buffer); + CHECK(StringEquals(Buffer, "0us")); + + NiceTimeSpanUsToBuffer(1, Buffer); + CHECK(StringEquals(Buffer, "1us")); + + NiceTimeSpanUsToBuffer(999, Buffer); + CHECK(StringEquals(Buffer, "999us")); + + NiceTimeSpanUsToBuffer(1000, Buffer); + CHECK(StringEquals(Buffer, "1.00ms")); + + NiceTimeSpanUsToBuffer(1500, Buffer); + CHECK(StringEquals(Buffer, "1.50ms")); + + NiceTimeSpanUsToBuffer(9999, Buffer); + CHECK(StringEquals(Buffer, "10.00ms")); // %.2f rounds 9.999 -> 10.00 + + NiceTimeSpanUsToBuffer(10000, Buffer); + CHECK(StringEquals(Buffer, "10.0ms")); + + NiceTimeSpanUsToBuffer(999500, Buffer); + CHECK(StringEquals(Buffer, "999.5ms")); + + NiceTimeSpanUsToBuffer(999999, Buffer); + CHECK(StringEquals(Buffer, "1000.0ms")); // boundary just below 1s + + // >=1s delegates to NiceTimeSpanMs. + NiceTimeSpanUsToBuffer(1000000, Buffer); + CHECK(StringEquals(Buffer, "1.00s")); + + NiceTimeSpanUsToBuffer(60000000, Buffer); + CHECK(StringEquals(Buffer, "1m00s")); + } } TEST_CASE("StringBuilder") |