diff options
Diffstat (limited to 'src/mongo/db/matcher/expression_optimize_test.cpp')
| -rw-r--r-- | src/mongo/db/matcher/expression_optimize_test.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/expression_optimize_test.cpp b/src/mongo/db/matcher/expression_optimize_test.cpp index eaa606e06df..04d2bc29e11 100644 --- a/src/mongo/db/matcher/expression_optimize_test.cpp +++ b/src/mongo/db/matcher/expression_optimize_test.cpp @@ -495,5 +495,26 @@ TEST(ExpressionOptimizeTest, OrRewrittenToIn) { ASSERT_BSONOBJ_EQ(optimizeExpr(queries[10].first), fromjson(queries[10].second)); } +TEST(ExpressionOptimizeTest, NorRemovesAlwaysFalseChildren) { + BSONObj obj = fromjson("{$nor: [{a: 1}, {$alwaysFalse: 1}]}"); + std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj)); + auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression)); + ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{a: {$not: {$eq: 1}}}")); +} + +TEST(ExpressionOptimizeTest, NorWithoutChildrenOptimizesToEmptyAnd) { + BSONObj obj = fromjson("{$nor: [{$alwaysFalse: 1}, {$alwaysFalse: 1}]}"); + std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj)); + auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression)); + ASSERT_TRUE(dynamic_cast<AndMatchExpression*>(optimizedMatchExpression.get())); + ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{}")); +} + +TEST(ExpressionOptimizeTest, NorWithAlwaysTrueChildOptimizesToAlwaysFalse) { + BSONObj obj = fromjson("{$nor: [{a: 1}, {$alwaysTrue: 1}]}"); + std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj)); + auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression)); + ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}")); +} } // namespace } // namespace mongo |
