diff options
author | David Storch <david.storch@10gen.com> | 2016-07-21 15:36:51 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2016-07-21 17:54:48 -0400 |
commit | 0c8085729e7062202bd66076e2ca7751aa338ab6 (patch) | |
tree | 0e682612f46f674ca7fe0f36712d58f2e309baee /src/mongo/db/pipeline/accumulator_test.cpp | |
parent | da9a2a5ddf53372f7f27f0c481ce4553f5d03315 (diff) | |
download | mongo-0c8085729e7062202bd66076e2ca7751aa338ab6.tar.gz |
SERVER-23349 add tests for $group and accumulators using collation
Diffstat (limited to 'src/mongo/db/pipeline/accumulator_test.cpp')
-rw-r--r-- | src/mongo/db/pipeline/accumulator_test.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/mongo/db/pipeline/accumulator_test.cpp b/src/mongo/db/pipeline/accumulator_test.cpp index f903e897edc..ef5fea0def9 100644 --- a/src/mongo/db/pipeline/accumulator_test.cpp +++ b/src/mongo/db/pipeline/accumulator_test.cpp @@ -32,6 +32,7 @@ #include "mongo/db/pipeline/document.h" #include "mongo/db/pipeline/document_value_test_util.h" #include "mongo/db/pipeline/expression_context.h" +#include "mongo/db/query/collation/collator_interface_mock.h" #include "mongo/dbtests/dbtests.h" namespace AccumulatorTests { @@ -47,9 +48,9 @@ using std::string; */ static void assertExpectedResults( std::string accumulator, + const intrusive_ptr<ExpressionContext>& expCtx, std::initializer_list<std::pair<std::vector<Value>, Value>> operations) { auto factory = Accumulator::getFactory(accumulator); - intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); for (auto&& op : operations) { try { // Asserts that result equals expected result when not sharded. @@ -101,8 +102,10 @@ static void assertExpectedResults( } TEST(Accumulators, Avg) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$avg", + expCtx, { // No documents evaluated. {{}, Value(BSONNULL)}, @@ -155,8 +158,10 @@ TEST(Accumulators, Avg) { } TEST(Accumulators, First) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$first", + expCtx, {// No documents evaluated. {{}, Value()}, @@ -172,8 +177,10 @@ TEST(Accumulators, First) { } TEST(Accumulators, Last) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$last", + expCtx, {// No documents evaluated. {{}, Value()}, @@ -189,8 +196,10 @@ TEST(Accumulators, Last) { } TEST(Accumulators, Min) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$min", + expCtx, {// No documents evaluated. {{}, Value(BSONNULL)}, @@ -205,9 +214,18 @@ TEST(Accumulators, Min) { {{Value(7), Value()}, Value(7)}}); } +TEST(Accumulators, MinRespectsCollation) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); + expCtx->setCollator( + stdx::make_unique<CollatorInterfaceMock>(CollatorInterfaceMock::MockType::kReverseString)); + assertExpectedResults("$min", expCtx, {{{Value("abc"), Value("cba")}, Value("cba")}}); +} + TEST(Accumulators, Max) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$max", + expCtx, {// No documents evaluated. {{}, Value(BSONNULL)}, @@ -222,9 +240,18 @@ TEST(Accumulators, Max) { {{Value(7), Value()}, Value(7)}}); } +TEST(Accumulators, MaxRespectsCollation) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); + expCtx->setCollator( + stdx::make_unique<CollatorInterfaceMock>(CollatorInterfaceMock::MockType::kReverseString)); + assertExpectedResults("$max", expCtx, {{{Value("abc"), Value("cba")}, Value("abc")}}); +} + TEST(Accumulators, Sum) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); assertExpectedResults( "$sum", + expCtx, {// No documents evaluated. {{}, Value(0)}, @@ -301,4 +328,14 @@ TEST(Accumulators, Sum) { {{Value(9), Value()}, Value(9)}}); } +TEST(Accumulators, AddToSetRespectsCollation) { + intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext()); + expCtx->setCollator( + stdx::make_unique<CollatorInterfaceMock>(CollatorInterfaceMock::MockType::kAlwaysEqual)); + assertExpectedResults( + "$addToSet", + expCtx, + {{{Value("a"), Value("b"), Value("c")}, Value(std::vector<Value>{Value("a")})}}); +} + } // namespace AccumulatorTests |