aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhor911 <hor911@ydb.tech>2023-11-02 01:49:27 +0300
committerhor911 <hor911@ydb.tech>2023-11-02 02:21:51 +0300
commitbca3674c13f0c9f70af994eaae1a1d7a3b5bc7e8 (patch)
treeda9e01c544881ff26fc9fd1d8b51398d2885fe61
parent87390bcd87e4553e147d5fb0f7aaa420aebb1966 (diff)
downloadydb-bca3674c13f0c9f70af994eaae1a1d7a3b5bc7e8.tar.gz
UT for Duration formatting
-rw-r--r--ydb/core/fq/libs/compute/common/ut/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/ut/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/ut/utils_ut.cpp42
-rw-r--r--ydb/core/fq/libs/compute/common/ut/ya.make1
-rw-r--r--ydb/core/fq/libs/compute/common/utils.cpp43
7 files changed, 82 insertions, 8 deletions
diff --git a/ydb/core/fq/libs/compute/common/ut/CMakeLists.darwin-x86_64.txt b/ydb/core/fq/libs/compute/common/ut/CMakeLists.darwin-x86_64.txt
index a30dc5b948..9971099bf1 100644
--- a/ydb/core/fq/libs/compute/common/ut/CMakeLists.darwin-x86_64.txt
+++ b/ydb/core/fq/libs/compute/common/ut/CMakeLists.darwin-x86_64.txt
@@ -30,6 +30,7 @@ target_link_options(ydb-core-fq-libs-compute-common-ut PRIVATE
)
target_sources(ydb-core-fq-libs-compute-common-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/config_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
)
set_property(
TARGET
diff --git a/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-aarch64.txt b/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-aarch64.txt
index e6806fa64f..71085a1b10 100644
--- a/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-aarch64.txt
+++ b/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-aarch64.txt
@@ -33,6 +33,7 @@ target_link_options(ydb-core-fq-libs-compute-common-ut PRIVATE
)
target_sources(ydb-core-fq-libs-compute-common-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/config_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
)
set_property(
TARGET
diff --git a/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-x86_64.txt b/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-x86_64.txt
index c82ac1da4d..41bb55c7ba 100644
--- a/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-x86_64.txt
+++ b/ydb/core/fq/libs/compute/common/ut/CMakeLists.linux-x86_64.txt
@@ -34,6 +34,7 @@ target_link_options(ydb-core-fq-libs-compute-common-ut PRIVATE
)
target_sources(ydb-core-fq-libs-compute-common-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/config_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
)
set_property(
TARGET
diff --git a/ydb/core/fq/libs/compute/common/ut/CMakeLists.windows-x86_64.txt b/ydb/core/fq/libs/compute/common/ut/CMakeLists.windows-x86_64.txt
index ac18755572..5876444320 100644
--- a/ydb/core/fq/libs/compute/common/ut/CMakeLists.windows-x86_64.txt
+++ b/ydb/core/fq/libs/compute/common/ut/CMakeLists.windows-x86_64.txt
@@ -23,6 +23,7 @@ target_link_libraries(ydb-core-fq-libs-compute-common-ut PUBLIC
)
target_sources(ydb-core-fq-libs-compute-common-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/config_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
)
set_property(
TARGET
diff --git a/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp b/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
new file mode 100644
index 0000000000..00fa7aae9d
--- /dev/null
+++ b/ydb/core/fq/libs/compute/common/ut/utils_ut.cpp
@@ -0,0 +1,42 @@
+#include <ydb/core/fq/libs/compute/common/utils.h>
+
+#include <library/cpp/testing/unittest/tests_data.h>
+#include <library/cpp/testing/unittest/registar.h>
+
+#include <google/protobuf/text_format.h>
+
+Y_UNIT_TEST_SUITE(FormatTimes) {
+ Y_UNIT_TEST(DurationUs) {
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 0), "0.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 1), "1us");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 10), "10us");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 111), "111us");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 1'000), "1ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 10'000), "10ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 100'000), "0.10s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 1'000'000), "1.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs(10'000'000), "10.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs( 1'099'000), "1.09s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs(99'888'000), "1m 39s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationUs(6'999'999'999), "1h 56m");
+ }
+ Y_UNIT_TEST(DurationMs) {
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 0), "0.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 1), "1ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 10), "10ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 99), "99ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 111), "0.11s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 2), "2ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 20), "20ms");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 200), "0.20s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 2'000), "2.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 20'000), "20.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 7'009), "7.00s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs( 99'999), "1m 39s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs(3'599'000), "59m 59s");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs(3'600'000), "1h 00m");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs(6'001'000), "1h 40m");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs(6'000'000'000), "1666h");
+ UNIT_ASSERT_EQUAL(NFq::FormatDurationMs(1'000'000'000'000), "277777h");
+ }
+}
diff --git a/ydb/core/fq/libs/compute/common/ut/ya.make b/ydb/core/fq/libs/compute/common/ut/ya.make
index 3feb279931..536d94ff54 100644
--- a/ydb/core/fq/libs/compute/common/ut/ya.make
+++ b/ydb/core/fq/libs/compute/common/ut/ya.make
@@ -8,6 +8,7 @@ ENDIF()
SRCS(
config_ut.cpp
+ utils_ut.cpp
)
YQL_LAST_ABI_VERSION()
diff --git a/ydb/core/fq/libs/compute/common/utils.cpp b/ydb/core/fq/libs/compute/common/utils.cpp
index f5864b5bf5..d65e8083c0 100644
--- a/ydb/core/fq/libs/compute/common/utils.cpp
+++ b/ydb/core/fq/libs/compute/common/utils.cpp
@@ -23,22 +23,49 @@ struct TTotalStatistics {
TString FormatDurationMs(ui64 durationMs) {
TStringBuilder builder;
- auto seconds = durationMs / 1'000;
- if (seconds >= 60) {
- builder << (seconds / 60) << "m " << (seconds % 60) << "s";
+ if (durationMs && durationMs < 100) {
+ builder << durationMs << "ms";
} else {
- auto hundredths = (durationMs % 1'000) / 10;
- builder << seconds << ".";
- if (hundredths < 10) {
- builder << '0';
+ auto seconds = durationMs / 1'000;
+ if (seconds >= 60) {
+ auto minutes = seconds / 60;
+ if (minutes >= 60) {
+ auto hours = minutes / 60;
+ builder << hours << 'h';
+ if (hours < 24) {
+ auto minutes60 = minutes % 60;
+ builder << ' ';
+ if (minutes60 < 10) {
+ builder << '0';
+ }
+ builder << minutes60 << 'm';
+ }
+ } else {
+ auto seconds60 = seconds % 60;
+ builder << minutes << "m ";
+ if (seconds60 < 10) {
+ builder << '0';
+ }
+ builder << seconds60 << 's';
+ }
+ } else {
+ auto hundredths = (durationMs % 1'000) / 10;
+ builder << seconds << '.';
+ if (hundredths < 10) {
+ builder << '0';
+ }
+ builder << hundredths << 's';
}
- builder << hundredths << "s";
}
return builder;
}
TString FormatDurationUs(ui64 durationUs) {
+ if (durationUs && durationUs < 1000) {
+ return TStringBuilder() << durationUs << "us";
+ }
+
return FormatDurationMs(durationUs / 1000);
}