From bc6ebff07e303e6739130a540f44704f0c1acffb Mon Sep 17 00:00:00 2001 From: Gil Date: Tue, 24 Apr 2018 10:24:32 -0700 Subject: 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 --- .../firestore/immutable/sorted_map_test.cc | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'Firestore/core/test') 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 all = Sequence(this->large_number()); + TypeParam map = ToMap(Shuffled(all)); + + auto begin = map.keys().begin(); + ASSERT_EQ(0, *begin); + + auto end = map.keys().end(); + ASSERT_EQ(all.size(), static_cast(std::distance(begin, end))); + + ASSERT_SEQ_EQ(all, map.keys()); +} + +TYPED_TEST(SortedMapTest, KeysFrom) { + std::vector all = Sequence(2, 42, 2); + TypeParam map = ToMap(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 all = Sequence(2, 42, 2); + TypeParam map = ToMap(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 -- cgit v1.2.3