aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/test
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2018-04-24 10:24:32 -0700
committerGravatar GitHub <noreply@github.com>2018-04-24 10:24:32 -0700
commitbc6ebff07e303e6739130a540f44704f0c1acffb (patch)
treea8a68834569c515d7943971604995fcd32b4d9d9 /Firestore/core/test
parent700413cb64bd9a6a9c57b862106195f39decb045 (diff)
Add key-only projections to immutable C++ maps (#1166)
* Add a simple range adapter. * Add SortedMap::keys * Add SortedMap::keys_from * Add SortedMap::keys_in
Diffstat (limited to 'Firestore/core/test')
-rw-r--r--Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc60
1 files changed, 60 insertions, 0 deletions
diff --git a/Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc b/Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc
index 25332c2..bcacb50 100644
--- a/Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc
+++ b/Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc
@@ -403,6 +403,66 @@ TYPED_TEST(SortedMapTest, IteratorInvalidation) {
ASSERT_EQ(size, result.size());
}
+TYPED_TEST(SortedMapTest, KeyIterator) {
+ std::vector<int> all = Sequence(this->large_number());
+ TypeParam map = ToMap<TypeParam>(Shuffled(all));
+
+ auto begin = map.keys().begin();
+ ASSERT_EQ(0, *begin);
+
+ auto end = map.keys().end();
+ ASSERT_EQ(all.size(), static_cast<size_t>(std::distance(begin, end)));
+
+ ASSERT_SEQ_EQ(all, map.keys());
+}
+
+TYPED_TEST(SortedMapTest, KeysFrom) {
+ std::vector<int> all = Sequence(2, 42, 2);
+ TypeParam map = ToMap<TypeParam>(Shuffled(all));
+ ASSERT_EQ(20u, map.size());
+
+ // Test from before keys.
+ ASSERT_SEQ_EQ(all, map.keys_from(0));
+
+ // Test from after keys.
+ ASSERT_SEQ_EQ(Empty(), map.keys_from(100));
+
+ // Test from a key in the map: should start at that key.
+ ASSERT_SEQ_EQ(Sequence(10, 42, 2), map.keys_from(10));
+
+ // Test from in between keys: should start just after that key.
+ ASSERT_SEQ_EQ(Sequence(12, 42, 2), map.keys_from(11));
+}
+
+TYPED_TEST(SortedMapTest, KeysIn) {
+ std::vector<int> all = Sequence(2, 42, 2);
+ TypeParam map = ToMap<TypeParam>(Shuffled(all));
+ ASSERT_EQ(20u, map.size());
+
+ // Constructs a sequence from `start` up to but not including `end` by 2.
+ auto Seq = [](int start, int end) { return Sequence(start, end, 2); };
+
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(0, 1)); // before to before
+ ASSERT_SEQ_EQ(all, map.keys_in(0, 100)) // before to after
+ ASSERT_SEQ_EQ(Seq(2, 6), map.keys_in(0, 6)) // before to in map
+ ASSERT_SEQ_EQ(Seq(2, 8), map.keys_in(0, 7)) // before to in between
+
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(100, 0)); // after to before
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(100, 110)); // after to after
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(100, 6)); // after to in map
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(100, 7)); // after to in between
+
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(6, 0)); // in map to before
+ ASSERT_SEQ_EQ(Seq(6, 42), map.keys_in(6, 100)); // in map to after
+ ASSERT_SEQ_EQ(Seq(6, 10), map.keys_in(6, 10)); // in map to in map
+ ASSERT_SEQ_EQ(Seq(6, 12), map.keys_in(6, 11)); // in map to in between
+
+ ASSERT_SEQ_EQ(Empty(), map.keys_in(7, 0)); // in between to before
+ ASSERT_SEQ_EQ(Seq(8, 42), map.keys_in(7, 100)); // in between to after
+ ASSERT_SEQ_EQ(Seq(8, 10), map.keys_in(7, 10)); // in between to key in map
+ ASSERT_SEQ_EQ(Seq(8, 14), map.keys_in(7, 13)); // in between to in between
+}
+
} // namespace immutable
} // namespace firestore
} // namespace firebase