summaryrefslogtreecommitdiff
path: root/src/mongo/util/time_support_test.cpp
diff options
context:
space:
mode:
authorMatthew Saltz <matthew.saltz@mongodb.com>2018-12-06 17:58:28 -0500
committerMatthew Saltz <matthew.saltz@mongodb.com>2018-12-07 17:42:53 -0500
commitd899a205ef66d916b071dd42fbb619775561a523 (patch)
tree25ef3f9436d3b61911b7d3f6da4c80a5364541a4 /src/mongo/util/time_support_test.cpp
parent8c3877860e988ec43616749e5995027266647922 (diff)
downloadmongo-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.cpp36
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