summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_parser_test.cpp
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2017-06-30 18:43:40 -0400
committerDavid Storch <david.storch@10gen.com>2017-07-05 12:39:49 -0400
commit2f5f2f851a37a99b4b6e1cbcbf8826183777ab1c (patch)
tree6311b8bcf1f30a03d44d9aefac8d0e5c5bb5e8c4 /src/mongo/db/matcher/expression_parser_test.cpp
parent390bb2badbc53345945b83fdcb2402f3f9cb4964 (diff)
downloadmongo-2f5f2f851a37a99b4b6e1cbcbf8826183777ab1c.tar.gz
SERVER-29912 Require argument to $pop to be 1 or -1.
Diffstat (limited to 'src/mongo/db/matcher/expression_parser_test.cpp')
-rw-r--r--src/mongo/db/matcher/expression_parser_test.cpp103
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");