diff options
author | Mihai Andrei <mihai.andrei@mongodb.com> | 2023-05-12 05:05:36 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-05-12 06:13:35 +0000 |
commit | 75ef59b570f937c0a14944187d43bf0707543980 (patch) | |
tree | 7d7e2b10582e92e938027d3273d634ee4711af20 /src/mongo | |
parent | 7a494b24bf306a620794069d3b3ea3d794209978 (diff) | |
download | mongo-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.cpp | 25 |
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 |