From 6f21175f57afa370a707026fcaf246eb081d1639 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Thu, 2 Feb 2023 07:14:30 -0800 Subject: [PATCH] Add a trailing decimal point to FormatTimeInMillisAsSeconds() output when input is an exact N seconds. PiperOrigin-RevId: 506610898 Change-Id: Idcd705c719e0e721148c350c8a14f27b9eb5c4f7 --- googletest/src/gtest-internal-inl.h | 3 ++- googletest/src/gtest.cc | 8 ++++++++ googletest/test/gtest_unittest.cc | 14 +++++++++++--- googletest/test/gtest_xml_test_utils.py | 4 +++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/googletest/src/gtest-internal-inl.h b/googletest/src/gtest-internal-inl.h index 2c9db4f2..9fbcfd34 100644 --- a/googletest/src/gtest-internal-inl.h +++ b/googletest/src/gtest-internal-inl.h @@ -92,7 +92,8 @@ GTEST_API_ TimeInMillis GetTimeInMillis(); // Returns true if and only if Google Test should use colors in the output. GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); -// Formats the given time in milliseconds as seconds. +// Formats the given time in milliseconds as seconds. If the input is an exact N +// seconds, the output has a trailing decimal point (e.g., "N." intead of "N"). GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms); // Converts the given time in milliseconds to a date string in the ISO 8601 diff --git a/googletest/src/gtest.cc b/googletest/src/gtest.cc index 19acb1cc..b9289439 100644 --- a/googletest/src/gtest.cc +++ b/googletest/src/gtest.cc @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -4089,6 +4090,13 @@ std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( // Formats the given time in milliseconds as seconds. std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) { ::std::stringstream ss; + // For the exact N seconds, makes sure output has a trailing decimal point. + // Sets precision so that we won't have many trailing zeros (e.g., 300 ms + // will be just 0.3, 410 ms 0.41, and so on) + ss << std::fixed + << std::setprecision( + ms % 1000 == 0 ? 0 : (ms % 100 == 0 ? 1 : (ms % 10 == 0 ? 2 : 3))) + << std::showpoint; ss << (static_cast(ms) * 1e-3); return ss.str(); } diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index e66e66b9..2199073d 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -382,7 +382,7 @@ TEST(CanonicalizeForStdLibVersioning, ElidesDoubleUnderNames) { // Tests FormatTimeInMillisAsSeconds(). TEST(FormatTimeInMillisAsSecondsTest, FormatsZero) { - EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0)); + EXPECT_EQ("0.", FormatTimeInMillisAsSeconds(0)); } TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { @@ -390,7 +390,11 @@ TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) { EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10)); EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200)); EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200)); - EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000)); + EXPECT_EQ("3.", FormatTimeInMillisAsSeconds(3000)); + EXPECT_EQ("10.", FormatTimeInMillisAsSeconds(10000)); + EXPECT_EQ("100.", FormatTimeInMillisAsSeconds(100000)); + EXPECT_EQ("123.456", FormatTimeInMillisAsSeconds(123456)); + EXPECT_EQ("1234567.89", FormatTimeInMillisAsSeconds(1234567890)); } TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { @@ -398,7 +402,11 @@ TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) { EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10)); EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200)); EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200)); - EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000)); + EXPECT_EQ("-3.", FormatTimeInMillisAsSeconds(-3000)); + EXPECT_EQ("-10.", FormatTimeInMillisAsSeconds(-10000)); + EXPECT_EQ("-100.", FormatTimeInMillisAsSeconds(-100000)); + EXPECT_EQ("-123.456", FormatTimeInMillisAsSeconds(-123456)); + EXPECT_EQ("-1234567.89", FormatTimeInMillisAsSeconds(-1234567890)); } // Tests FormatEpochTimeInMillisAsIso8601(). The correctness of conversion diff --git a/googletest/test/gtest_xml_test_utils.py b/googletest/test/gtest_xml_test_utils.py index caa77b59..8fcb6933 100755 --- a/googletest/test/gtest_xml_test_utils.py +++ b/googletest/test/gtest_xml_test_utils.py @@ -218,7 +218,9 @@ class GTestXMLTestCase(gtest_test_utils.TestCase): ) if element.tagName in ('testsuites', 'testsuite', 'testcase'): time = element.getAttributeNode('time') - time.value = re.sub(r'^\d+(\.\d+)?$', '*', time.value) + # The value for exact N seconds has a traling decimal point (e.g., "10." + # instead of "10") + time.value = re.sub(r'^\d+\.(\d+)?$', '*', time.value) type_param = element.getAttributeNode('type_param') if type_param and type_param.value: type_param.value = '*'