diff options
author | Matthew Saltz <matthew.saltz@mongodb.com> | 2018-12-06 17:58:28 -0500 |
---|---|---|
committer | Matthew Saltz <matthew.saltz@mongodb.com> | 2018-12-07 17:42:53 -0500 |
commit | d899a205ef66d916b071dd42fbb619775561a523 (patch) | |
tree | 25ef3f9436d3b61911b7d3f6da4c80a5364541a4 /src/mongo/util/time_support_test.cpp | |
parent | 8c3877860e988ec43616749e5995027266647922 (diff) | |
download | mongo-d899a205ef66d916b071dd42fbb619775561a523.tar.gz |
SERVER-38445 Fix Date_t addition with Duration
Diffstat (limited to 'src/mongo/util/time_support_test.cpp')
-rw-r--r-- | src/mongo/util/time_support_test.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/mongo/util/time_support_test.cpp b/src/mongo/util/time_support_test.cpp index 0dcd341ae9a..b827da75867 100644 --- a/src/mongo/util/time_support_test.cpp +++ b/src/mongo/util/time_support_test.cpp @@ -857,5 +857,41 @@ TEST(SystemTime, ConvertDateToSystemTime) { ASSERT_EQUALS(aDate, Date_t(aTimePoint)); } +TEST(DateTArithmetic, AdditionNoOverflowSucceeds) { + auto dateFromMillis = [](long long ms) { + return Date_t::fromDurationSinceEpoch(Milliseconds{ms}); + }; + + // Test operator+ + ASSERT_EQ(dateFromMillis(1001), dateFromMillis(1000) + Milliseconds{1}); + // Test operator+= + auto dateToIncrement = dateFromMillis(1000); + dateToIncrement += Milliseconds(1); + ASSERT_EQ(dateFromMillis(1001), dateToIncrement); +} + +TEST(DateTArithmetic, AdditionOverflowThrows) { + // Test operator+ + ASSERT_THROWS_CODE(Date_t::max() + Milliseconds(1), DBException, ErrorCodes::DurationOverflow); + // Test operator+= + auto dateToIncrement = Date_t::max(); + ASSERT_THROWS_CODE( + dateToIncrement += Milliseconds(1), DBException, ErrorCodes::DurationOverflow); + + // TODO (SERVER-38442): Can change Date_t::fromDurationSinceEpoch(Milliseconds::min()) to + // Date_t::min() once it's correct. + ASSERT_THROWS_CODE(Date_t::fromDurationSinceEpoch(Milliseconds::min()) + Milliseconds(-1), + DBException, + ErrorCodes::DurationOverflow); +} + +TEST(DateTArithmetic, SubtractionOverflowThrows) { + // TODO (SERVER-38442): Can change Date_t::fromDurationSinceEpoch(Milliseconds::min()) to + // Date_t::min() once it's correct. + ASSERT_THROWS_CODE(Date_t::fromDurationSinceEpoch(Milliseconds::min()) - Milliseconds(1), + DBException, + ErrorCodes::DurationOverflow); + ASSERT_THROWS_CODE(Date_t::max() - Milliseconds(-1), DBException, ErrorCodes::DurationOverflow); +} } // namespace } // namespace mongo |