aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore/string.cpp')
-rw-r--r--src/zencore/string.cpp62
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")