diff options
author | Bernard Gorman <bernard.gorman@gmail.com> | 2018-09-21 04:12:00 +0100 |
---|---|---|
committer | Bernard Gorman <bernard.gorman@gmail.com> | 2018-09-22 01:09:31 +0100 |
commit | 10a0d12e9ea977660eb247143b09ecfdc51d05ea (patch) | |
tree | b7cacf5ae9fc8d81f1905cdf4969ce57fb167c1b /src/mongo/db/field_ref_test.cpp | |
parent | a8995601144d16fe6c762624f64f5690b5caf684 (diff) | |
download | mongo-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.cpp | 37 |
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 |