diff options
Diffstat (limited to 'src/components/utils/test/date_time_test.cc')
-rw-r--r-- | src/components/utils/test/date_time_test.cc | 392 |
1 files changed, 333 insertions, 59 deletions
diff --git a/src/components/utils/test/date_time_test.cc b/src/components/utils/test/date_time_test.cc index ddcf679a1..db2b10182 100644 --- a/src/components/utils/test/date_time_test.cc +++ b/src/components/utils/test/date_time_test.cc @@ -1,128 +1,402 @@ /* -* Copyright (c) 2014, Ford Motor Company -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following -* disclaimer in the documentation and/or other materials provided with the -* distribution. -* -* Neither the name of the Ford Motor Company nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*/ - -#include <unistd.h> + * Copyright (c) 2015, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ #include "gtest/gtest.h" -#include "gmock/gmock.h" - #include "utils/date_time.h" -namespace test { -namespace components { -namespace utils { +namespace test { +namespace components { +namespace utils { +using namespace date_time; TEST(DateTimeTest, GetCurrentTime) { + + //arrange const TimevalStruct time1 = date_time::DateTime::getCurrentTime(); + + //assert ASSERT_NE(0, time1.tv_sec); ASSERT_GE(time1.tv_usec, 0); + //act const TimevalStruct time2 = date_time::DateTime::getCurrentTime(); + + //assert ASSERT_NE(0, time2.tv_sec); ASSERT_GE(time2.tv_usec, 0); - ASSERT_GE(time2.tv_sec, time1.tv_sec); + ASSERT_GE(time2.tv_sec, time1.tv_sec); +} + +TEST(DateTimeTest, GetSecs) { + //arrange + TimevalStruct time; + time.tv_sec = 1; + time.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + //assert + ASSERT_EQ(1, date_time::DateTime::getSecs(time)); } TEST(DateTimeTest, GetmSecs) { + //arrange TimevalStruct time; - time.tv_sec = 1; + time.tv_sec = 1; time.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; - ASSERT_EQ(time.tv_sec * date_time::DateTime::MILLISECONDS_IN_SECOND + - time.tv_usec / date_time::DateTime::MICROSECONDS_IN_MILLISECONDS, - date_time::DateTime::getmSecs(time)); + int64_t expect_value = time.tv_sec + * date_time::DateTime::MILLISECONDS_IN_SECOND + + time.tv_usec / date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + //assert + ASSERT_EQ(expect_value, date_time::DateTime::getmSecs(time)); } TEST(DateTimeTest, GetuSecs) { + //arrange TimevalStruct time; - time.tv_sec = 3; + time.tv_sec = 3; time.tv_usec = 4; - ASSERT_EQ(time.tv_sec * date_time::DateTime::MILLISECONDS_IN_SECOND * - date_time::DateTime::MICROSECONDS_IN_MILLISECONDS + time.tv_usec, - date_time::DateTime::getuSecs(time)); + int64_t expect_value = time.tv_sec + * date_time::DateTime::MILLISECONDS_IN_SECOND + * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS + time.tv_usec; + //assert + ASSERT_EQ(expect_value, date_time::DateTime::getuSecs(time)); } TEST(DateTimeTest, GetuSecsmSecs) { + //arrange TimevalStruct time; - time.tv_sec = 5; + time.tv_sec = 5; time.tv_usec = 6; - ASSERT_EQ( date_time::DateTime::getmSecs(time), - date_time::DateTime::getuSecs(time) / date_time::DateTime::MICROSECONDS_IN_MILLISECONDS); + int64_t expect_value = date_time::DateTime::getuSecs(time) + / date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + //assert + ASSERT_EQ(expect_value, date_time::DateTime::getmSecs(time)); } TEST(DateTimeTest, CalculateTimeSpan) { + //arrange const TimevalStruct time = date_time::DateTime::getCurrentTime(); const uint32_t sleep_time_mSec = 10; usleep(sleep_time_mSec * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS); - ASSERT_GE(date_time::DateTime::calculateTimeSpan(time), - sleep_time_mSec); + //assert + ASSERT_GE(date_time::DateTime::calculateTimeSpan(time), sleep_time_mSec); } TEST(DateTimeTest, CalculateTimeDiff) { + + //arrange TimevalStruct time1; - time1.tv_sec = 1; + time1.tv_sec = 1; time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; TimevalStruct time2; - time2.tv_sec = 3; + time2.tv_sec = 3; time2.tv_usec = 4 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; //time2 to time1 TimevalStruct diff1; - diff1.tv_sec = time2.tv_sec - time1.tv_sec; + diff1.tv_sec = time2.tv_sec - time1.tv_sec; diff1.tv_usec = time2.tv_usec - time1.tv_usec; const int64_t mSecDiff = static_cast<int64_t>(diff1.tv_sec) * 1000 + diff1.tv_usec / 1000; - ASSERT_EQ(mSecDiff, - date_time::DateTime::calculateTimeDiff(time2, time1)); + //assert + ASSERT_EQ(mSecDiff, date_time::DateTime::calculateTimeDiff(time2, time1)); //time1 to time2 TimevalStruct diff2; - diff2.tv_sec = time1.tv_sec - time2.tv_sec; + diff2.tv_sec = time1.tv_sec - time2.tv_sec; diff2.tv_usec = time1.tv_usec - time2.tv_usec; const int64_t mSecDiff2 = -(static_cast<int64_t>(diff2.tv_sec) * 1000 + diff2.tv_usec / 1000); - ASSERT_EQ(mSecDiff2, - date_time::DateTime::calculateTimeDiff(time1, time2)); + //assert + ASSERT_EQ(mSecDiff2, date_time::DateTime::calculateTimeDiff(time1, time2)); +} + +TEST(DateTimeTest, CalculateEqualTimeDiff) { + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + TimevalStruct time2; + time2.tv_sec = 1; + time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time2, time1)); + ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time1, time2)); +} + +TEST(DateTimeTest, compareTime) { + + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + TimevalStruct time2; + time2.tv_sec = 2; + time2.tv_usec = 4 * date_time::DateTime::MICROSECONDS_IN_MILLISECONDS; + + //assert + ASSERT_EQ(LESS, date_time::DateTime::compareTime(time1, time2)); + ASSERT_EQ(GREATER, date_time::DateTime::compareTime(time2, time1)); + ASSERT_NE(EQUAL, date_time::DateTime::compareTime(time2, time1)); + + //act + TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); + + //assert + ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time3)); +} + +TEST(DateTimeTest, GetSecs_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 0; + time1.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_EQ(1, date_time::DateTime::getSecs(time1)); +} + +TEST(DateTimeTest, compareTime_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 0; + time2.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_EQ(1, date_time::DateTime::getSecs(time1)); + ASSERT_EQ(1, date_time::DateTime::getSecs(time2)); + ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time2)); } +TEST(DateTimeTest, compareEqualTime_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 0; + time2.tv_usec = date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_TRUE(date_time::DateTime::Equal(time1, time2)); +} + +TEST(DateTimeTest, compareLessTime_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 0; + time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_TRUE(date_time::DateTime::Less(time1, time2)); +} + +TEST(DateTimeTest, compareGreaterTime_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 0; + time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_TRUE(date_time::DateTime::Greater(time2, time1)); +} + +TEST(DateTimeTest, CalculateTimeSub_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 1; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 0; + time2.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); + + //assert + ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time1, time3)); +} + +TEST(DateTimeTest, CalculateTimeDiff_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 2; + time1.tv_usec = 5 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + TimevalStruct time2; + time2.tv_sec = 3; + time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_EQ(3000, date_time::DateTime::calculateTimeDiff(time2, time1)); + ASSERT_EQ(3000, date_time::DateTime::calculateTimeDiff(time1, time2)); +} + +TEST(DateTimeTest, CalculateEqualTimeDiff_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 2; + time1.tv_usec = 2 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + TimevalStruct time2; + time2.tv_sec = 3; + time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + //assert + ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time2, time1)); + ASSERT_EQ(0, date_time::DateTime::calculateTimeDiff(time1, time2)); +} + +TEST(DateTimeTest, CalculateEqualTimeSub_UsecConvertedInSec) { + //arrange + TimevalStruct time1; + time1.tv_sec = 3; + time1.tv_usec = 0; + + TimevalStruct time2; + time2.tv_sec = 2; + time2.tv_usec = 1 * date_time::DateTime::MICROSECONDS_IN_SECOND; + + TimevalStruct time3 = date_time::DateTime::Sub(time2, time1); + TimevalStruct time4 = date_time::DateTime::Sub(time1, time2); + + TimevalStruct time_expected; + time_expected.tv_sec = 0; + time_expected.tv_usec = 0; + //assert + ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time_expected, time3)); + ASSERT_EQ(EQUAL, date_time::DateTime::compareTime(time_expected, time4)); +} + +TEST(DateTimeTest, AddMilliseconds_SetMillisecondMultiplesSecond_ExpectChangeTime) { + TimevalStruct time1; + time1.tv_sec = 3; + time1.tv_usec = 0; + uint32_t milliseconds = 7000; + date_time::DateTime::AddMilliseconds(time1, milliseconds); + ASSERT_EQ(10, time1.tv_sec); + ASSERT_EQ(0, time1.tv_usec); +} + +TEST(DateTimeTest, AddMilliseconds_SetMillisecondNotMultiplesSecond_ExpectChangeTime) { + TimevalStruct time1; + uint32_t milliseconds = 7500; + time1.tv_sec = 3; + time1.tv_usec = 0; + date_time::DateTime::AddMilliseconds(time1, milliseconds); + ASSERT_EQ(10, time1.tv_sec); + ASSERT_EQ(500000, time1.tv_usec); +} + +TEST(DateTimeTest, AddMilliseconds_SetMilliSecondLessThenSeconds_ExpectChangeTime) { + TimevalStruct time1; + uint32_t milliseconds = 500; + time1.tv_sec = 3; + time1.tv_usec = 0; + date_time::DateTime::AddMilliseconds(time1, milliseconds); + ASSERT_EQ(3, time1.tv_sec); + ASSERT_EQ(500000, time1.tv_usec); +} + +TEST(DateTimeTest, AddMilliseconds_SetMillisecondEqualNull_ExpectNotChangeTime) { + TimevalStruct time1; + uint32_t milliseconds = 0; + time1.tv_sec = 3; + time1.tv_usec = 0; + date_time::DateTime::AddMilliseconds(time1, milliseconds); + ASSERT_EQ(3, time1.tv_sec); + ASSERT_EQ(0, time1.tv_usec); +} + +TEST(DateTimeTest, AddMilliseconds_SetOverlowMicrosecond_ExpectChangeTime) { + TimevalStruct time1; + uint32_t milliseconds = 7600; + time1.tv_sec = 3; + time1.tv_usec = 500000; + date_time::DateTime::AddMilliseconds(time1, milliseconds); + ASSERT_EQ(11, time1.tv_sec); + ASSERT_EQ(100000, time1.tv_usec); +} + +TEST(DateTimeTest, Operator_minus_TimevalStruct_positive){ + TimevalStruct time1; + TimevalStruct time2; + TimevalStruct time3; + time1.tv_sec = 3; + time1.tv_usec = 0; + time2.tv_sec = 3; + time2.tv_usec = 0; + time3.tv_sec = 2; + time3.tv_usec = 9000000; + ASSERT_EQ(0, date_time::DateTime::getSecs(time1 - time2)); + ASSERT_EQ(8000000, date_time::DateTime::getuSecs(time3 - time1)); +} + +TEST(DateTimeTest, Operator_minus_TimevalStruct_negative){ + TimevalStruct time1; + TimevalStruct time2; + time1.tv_sec = 3; + time1.tv_usec = 0; + time2.tv_sec = 2; + time2.tv_usec = 9000000; + ASSERT_NE(1, date_time::DateTime::getSecs(time1 - time2)); + ASSERT_NE(-8000000, date_time::DateTime::getSecs(time2 - time1)); +} + + } // namespace utils } // namespace components } // namespace test |