summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/index/s2_key_generator_test.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mongo/db/index/s2_key_generator_test.cpp b/src/mongo/db/index/s2_key_generator_test.cpp
index 23a321ddc68..d88c8e04919 100644
--- a/src/mongo/db/index/s2_key_generator_test.cpp
+++ b/src/mongo/db/index/s2_key_generator_test.cpp
@@ -27,12 +27,12 @@
* it in the license file.
*/
-
#include "mongo/platform/basic.h"
#include "mongo/db/index/expression_keys_private.h"
#include <algorithm>
+#include <s2.h>
#include "mongo/bson/bsonobjbuilder.h"
#include "mongo/bson/simple_bsonobj_comparator.h"
@@ -687,4 +687,27 @@ TEST_F(S2KeyGeneratorTest, MidPathSingleElementArrayIsConsideredMultikey) {
assertMultikeyPathsEqual(MultikeyPaths{{0U}, MultikeyComponents{}}, actualMultikeyPaths);
}
+// Test which verifies that the rounding functions used by s2 follow 'round to even' rounding
+// behavior.
+TEST_F(S2KeyGeneratorTest, VerifyS2RoundingBehavior) {
+ const double roundDownToEven = 2.5;
+ ASSERT_EQ(2, MathUtil::FastIntRound(roundDownToEven));
+ ASSERT_EQ(2LL, MathUtil::FastInt64Round(roundDownToEven));
+
+ const double roundUpToEven = 3.5;
+ ASSERT_EQ(4, MathUtil::FastIntRound(roundUpToEven));
+ ASSERT_EQ(4LL, MathUtil::FastInt64Round(roundUpToEven));
+
+ const double roundDownToEvenNegative = -3.5;
+ ASSERT_EQ(-4, MathUtil::FastIntRound(roundDownToEvenNegative));
+ ASSERT_EQ(-4LL, MathUtil::FastInt64Round(roundDownToEvenNegative));
+
+ const double roundUpToEvenNegative = -2.5;
+ ASSERT_EQ(-2, MathUtil::FastIntRound(roundUpToEvenNegative));
+ ASSERT_EQ(-2LL, MathUtil::FastInt64Round(roundUpToEvenNegative));
+
+ const double point = 944920918.5;
+ ASSERT_EQ(944920918, MathUtil::FastIntRound(point));
+ ASSERT_EQ(944920918LL, MathUtil::FastInt64Round(point));
+}
} // namespace