summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_ref_test.cpp
diff options
context:
space:
mode:
authorBernard Gorman <bernard.gorman@gmail.com>2018-09-21 04:12:00 +0100
committerBernard Gorman <bernard.gorman@gmail.com>2018-09-22 01:09:31 +0100
commit10a0d12e9ea977660eb247143b09ecfdc51d05ea (patch)
treeb7cacf5ae9fc8d81f1905cdf4969ce57fb167c1b /src/mongo/db/field_ref_test.cpp
parenta8995601144d16fe6c762624f64f5690b5caf684 (diff)
downloadmongo-10a0d12e9ea977660eb247143b09ecfdc51d05ea.tar.gz
SERVER-35493 Planning support for "field name or array index" path components in wildcard indexes
Diffstat (limited to 'src/mongo/db/field_ref_test.cpp')
-rw-r--r--src/mongo/db/field_ref_test.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mongo/db/field_ref_test.cpp b/src/mongo/db/field_ref_test.cpp
index 654444bc472..616b8a4d5cc 100644
--- a/src/mongo/db/field_ref_test.cpp
+++ b/src/mongo/db/field_ref_test.cpp
@@ -166,25 +166,39 @@ TEST(Prefix, Normal) {
prefix.parse("a.b");
ASSERT_TRUE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
prefix.parse("a");
ASSERT_TRUE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
+
+ prefix.parse("a.b.c");
+ ASSERT_FALSE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
}
TEST(Prefix, Dotted) {
FieldRef prefix("a.0"), base("a.0.c");
ASSERT_TRUE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
+
+ prefix.parse("a.0.c");
+ ASSERT_FALSE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
}
TEST(Prefix, NoPrefixes) {
FieldRef prefix("a.b"), base("a.b");
ASSERT_FALSE(prefix.isPrefixOf(base));
+ ASSERT_TRUE(prefix.isPrefixOfOrEqualTo(base));
base.parse("a");
ASSERT_FALSE(prefix.isPrefixOf(base));
+ ASSERT_FALSE(prefix.isPrefixOfOrEqualTo(base));
base.parse("b");
ASSERT_FALSE(prefix.isPrefixOf(base));
+ ASSERT_FALSE(prefix.isPrefixOfOrEqualTo(base));
}
TEST(Prefix, EmptyBase) {
@@ -837,4 +851,27 @@ TEST(RemoveLastPartLong, FieldRefFromCopyAssignmentIsADeepCopy) {
ASSERT_EQ(other, FieldRef("a.b.c"));
}
+TEST(NumericPathComponents, CanIdentifyNumericPathComponents) {
+ FieldRef path("a.0.b.1.c");
+ ASSERT(!path.isNumericPathComponent(0));
+ ASSERT(path.isNumericPathComponent(1));
+ ASSERT(!path.isNumericPathComponent(2));
+ ASSERT(path.isNumericPathComponent(3));
+ ASSERT(!path.isNumericPathComponent(4));
+}
+
+TEST(NumericPathComponents, CanObtainAllNumericPathComponents) {
+ FieldRef path("a.0.b.1.c.2.d");
+ std::set<size_t> expectedComponents{size_t(1), size_t(3), size_t(5)};
+ auto numericPathComponents = path.getNumericPathComponents();
+ ASSERT(numericPathComponents == expectedComponents);
+}
+
+TEST(NumericPathComponents, FieldsWithLeadingZeroesAreNotConsideredNumeric) {
+ FieldRef path("a.0.b.01.c.2.d");
+ std::set<size_t> expectedComponents{size_t(1), size_t(5)};
+ auto numericPathComponents = path.getNumericPathComponents();
+ ASSERT(numericPathComponents == expectedComponents);
+}
+
} // namespace