diff options
author | hor911 <hor911@ydb.tech> | 2023-11-02 01:49:27 +0300 |
---|---|---|
committer | hor911 <hor911@ydb.tech> | 2023-11-02 02:21:51 +0300 |
commit | bca3674c13f0c9f70af994eaae1a1d7a3b5bc7e8 (patch) | |
tree | da9e01c544881ff26fc9fd1d8b51398d2885fe61 | |
parent | 87390bcd87e4553e147d5fb0f7aaa420aebb1966 (diff) | |
download | ydb-bca3674c13f0c9f70af994eaae1a1d7a3b5bc7e8.tar.gz |
UT for Duration formatting
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); } |