diff options
Diffstat (limited to 'src/mongo/db/matcher/expression_parser_test.cpp')
-rw-r--r-- | src/mongo/db/matcher/expression_parser_test.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/expression_parser_test.cpp b/src/mongo/db/matcher/expression_parser_test.cpp index d715bf46cfc..16b66cce0f7 100644 --- a/src/mongo/db/matcher/expression_parser_test.cpp +++ b/src/mongo/db/matcher/expression_parser_test.cpp @@ -89,6 +89,109 @@ TEST(MatchExpressionParserTest, MinDistanceWithoutNearFailsToParse) { ASSERT_FALSE(result.isOK()); } +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsNegative) { + BSONObj query = BSON("" << -2LL); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongAcceptsNegative) { + BSONObj query = BSON("" << -2LL); + auto result = MatchExpressionParser::parseIntegerElementToLong(query.firstElement()); + ASSERT_OK(result.getStatus()); + ASSERT_EQ(-2LL, result.getValue()); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsTooLargeDouble) { + BSONObj query = BSON("" << MatchExpressionParser::kLongLongMaxPlusOneAsDouble); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsTooLargeDouble) { + BSONObj query = BSON("" << MatchExpressionParser::kLongLongMaxPlusOneAsDouble); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsTooLargeNegativeDouble) { + BSONObj query = BSON("" << std::numeric_limits<double>::min()); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsString) { + BSONObj query = BSON("" + << "1"); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsString) { + BSONObj query = BSON("" + << "1"); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsNonIntegralDouble) { + BSONObj query = BSON("" << 2.5); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsNonIntegralDouble) { + BSONObj query = BSON("" << 2.5); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsNonIntegralDecimal) { + BSONObj query = BSON("" << Decimal128("2.5")); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsNonIntegralDecimal) { + BSONObj query = BSON("" << Decimal128("2.5")); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongRejectsLargestDecimal) { + BSONObj query = BSON("" << Decimal128(Decimal128::kLargestPositive)); + ASSERT_NOT_OK( + MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongRejectsLargestDecimal) { + BSONObj query = BSON("" << Decimal128(Decimal128::kLargestPositive)); + ASSERT_NOT_OK(MatchExpressionParser::parseIntegerElementToLong(query.firstElement())); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongAcceptsZero) { + BSONObj query = BSON("" << 0); + auto result = MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement()); + ASSERT_OK(result.getStatus()); + ASSERT_EQ(result.getValue(), 0LL); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongAcceptsZero) { + BSONObj query = BSON("" << 0); + auto result = MatchExpressionParser::parseIntegerElementToLong(query.firstElement()); + ASSERT_OK(result.getStatus()); + ASSERT_EQ(result.getValue(), 0LL); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToNonNegativeLongAcceptsThree) { + BSONObj query = BSON("" << 3.0); + auto result = MatchExpressionParser::parseIntegerElementToNonNegativeLong(query.firstElement()); + ASSERT_OK(result.getStatus()); + ASSERT_EQ(result.getValue(), 3LL); +} + +TEST(MatchExpressionParserTest, ParseIntegerElementToLongAcceptsThree) { + BSONObj query = BSON("" << 3.0); + auto result = MatchExpressionParser::parseIntegerElementToLong(query.firstElement()); + ASSERT_OK(result.getStatus()); + ASSERT_EQ(result.getValue(), 3LL); +} + StatusWith<int> fib(int n) { if (n < 0) return StatusWith<int>(ErrorCodes::BadValue, "paramter to fib has to be >= 0"); |