diff options
author | David Storch <david.storch@10gen.com> | 2015-02-02 14:32:08 -0500 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-02-05 13:08:35 -0500 |
commit | 00f28d5b4df029f37796313fb1296b3d2326deeb (patch) | |
tree | d0944eef2324a719d98625e4a121be50a7b2f355 | |
parent | 0629650fd4ad37d3c1d4150914b4ed5704e8209d (diff) | |
download | mongo-00f28d5b4df029f37796313fb1296b3d2326deeb.tar.gz |
SERVER-15605 add index bounds builder unit tests for NaN
-rw-r--r-- | src/mongo/db/query/index_bounds_builder_test.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mongo/db/query/index_bounds_builder_test.cpp b/src/mongo/db/query/index_bounds_builder_test.cpp index e82c130b278..a46b6cf6e70 100644 --- a/src/mongo/db/query/index_bounds_builder_test.cpp +++ b/src/mongo/db/query/index_bounds_builder_test.cpp @@ -387,6 +387,77 @@ namespace { ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); } + TEST(IndexBoundsBuilderTest, TranslateEqualNan) { + IndexEntry testIndex = IndexEntry(BSONObj()); + BSONObj obj = fromjson("{a: NaN}"); + auto_ptr<MatchExpression> expr(parseMatchExpression(obj)); + BSONElement elt = obj.firstElement(); + OrderedIntervalList oil; + IndexBoundsBuilder::BoundsTightness tightness; + IndexBoundsBuilder::translate(expr.get(), elt, testIndex, &oil, &tightness); + ASSERT_EQUALS(oil.name, "a"); + ASSERT_EQUALS(oil.intervals.size(), 1U); + ASSERT_EQUALS(Interval::INTERVAL_EQUALS, oil.intervals[0].compare( + Interval(fromjson("{'': NaN, '': NaN}"), true, true))); + ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); + } + + TEST(IndexBoundsBuilderTest, TranslateLtNan) { + IndexEntry testIndex = IndexEntry(BSONObj()); + BSONObj obj = fromjson("{a: {$lt: NaN}}"); + auto_ptr<MatchExpression> expr(parseMatchExpression(obj)); + BSONElement elt = obj.firstElement(); + OrderedIntervalList oil; + IndexBoundsBuilder::BoundsTightness tightness; + IndexBoundsBuilder::translate(expr.get(), elt, testIndex, &oil, &tightness); + ASSERT_EQUALS(oil.name, "a"); + ASSERT_EQUALS(oil.intervals.size(), 0U); + ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); + } + + TEST(IndexBoundsBuilderTest, TranslateLteNan) { + IndexEntry testIndex = IndexEntry(BSONObj()); + BSONObj obj = fromjson("{a: {$lte: NaN}}"); + auto_ptr<MatchExpression> expr(parseMatchExpression(obj)); + BSONElement elt = obj.firstElement(); + OrderedIntervalList oil; + IndexBoundsBuilder::BoundsTightness tightness; + IndexBoundsBuilder::translate(expr.get(), elt, testIndex, &oil, &tightness); + ASSERT_EQUALS(oil.name, "a"); + ASSERT_EQUALS(oil.intervals.size(), 1U); + ASSERT_EQUALS(Interval::INTERVAL_EQUALS, oil.intervals[0].compare( + Interval(fromjson("{'': NaN, '': NaN}"), true, true))); + ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); + } + + TEST(IndexBoundsBuilderTest, TranslateGtNan) { + IndexEntry testIndex = IndexEntry(BSONObj()); + BSONObj obj = fromjson("{a: {$gt: NaN}}"); + auto_ptr<MatchExpression> expr(parseMatchExpression(obj)); + BSONElement elt = obj.firstElement(); + OrderedIntervalList oil; + IndexBoundsBuilder::BoundsTightness tightness; + IndexBoundsBuilder::translate(expr.get(), elt, testIndex, &oil, &tightness); + ASSERT_EQUALS(oil.name, "a"); + ASSERT_EQUALS(oil.intervals.size(), 0U); + ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); + } + + TEST(IndexBoundsBuilderTest, TranslateGteNan) { + IndexEntry testIndex = IndexEntry(BSONObj()); + BSONObj obj = fromjson("{a: {$gte: NaN}}"); + auto_ptr<MatchExpression> expr(parseMatchExpression(obj)); + BSONElement elt = obj.firstElement(); + OrderedIntervalList oil; + IndexBoundsBuilder::BoundsTightness tightness; + IndexBoundsBuilder::translate(expr.get(), elt, testIndex, &oil, &tightness); + ASSERT_EQUALS(oil.name, "a"); + ASSERT_EQUALS(oil.intervals.size(), 1U); + ASSERT_EQUALS(Interval::INTERVAL_EQUALS, oil.intervals[0].compare( + Interval(fromjson("{'': NaN, '': NaN}"), true, true))); + ASSERT_EQUALS(tightness, IndexBoundsBuilder::EXACT); + } + TEST(IndexBoundsBuilderTest, TranslateEqual) { IndexEntry testIndex = IndexEntry(BSONObj()); BSONObj obj = BSON("a" << 4); |