diff options
author | Gil <mcg@google.com> | 2018-04-24 10:24:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-24 10:24:32 -0700 |
commit | bc6ebff07e303e6739130a540f44704f0c1acffb (patch) | |
tree | a8a68834569c515d7943971604995fcd32b4d9d9 /Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc | |
parent | 700413cb64bd9a6a9c57b862106195f39decb045 (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/firebase/firestore/immutable/sorted_map_test.cc')
-rw-r--r-- | Firestore/core/test/firebase/firestore/immutable/sorted_map_test.cc | 60 |
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 |