summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMihai Andrei <mihai.andrei@mongodb.com>2023-05-12 05:05:36 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-05-12 06:13:35 +0000
commit75ef59b570f937c0a14944187d43bf0707543980 (patch)
tree7d7e2b10582e92e938027d3273d634ee4711af20 /src/mongo
parent7a494b24bf306a620794069d3b3ea3d794209978 (diff)
downloadmongo-75ef59b570f937c0a14944187d43bf0707543980.tar.gz
SERVER-75392 Update fast integer rounding implementations in S2 library
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