diff options
Diffstat (limited to 'chromium/third_party/nearby/src/connections/implementation/mediums/lost_entity_tracker_test.cc')
-rw-r--r-- | chromium/third_party/nearby/src/connections/implementation/mediums/lost_entity_tracker_test.cc | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/connections/implementation/mediums/lost_entity_tracker_test.cc b/chromium/third_party/nearby/src/connections/implementation/mediums/lost_entity_tracker_test.cc new file mode 100644 index 00000000000..b2211ae0828 --- /dev/null +++ b/chromium/third_party/nearby/src/connections/implementation/mediums/lost_entity_tracker_test.cc @@ -0,0 +1,137 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "connections/implementation/mediums/lost_entity_tracker.h" + +#include "gtest/gtest.h" + +namespace location { +namespace nearby { +namespace connections { +namespace mediums { +namespace { + +struct TestEntity { + int id; + + template <typename H> + friend H AbslHashValue(H h, const TestEntity& test_entity) { + return H::combine(std::move(h), test_entity.id); + } + + bool operator==(const TestEntity& other) const { return id == other.id; } + bool operator<(const TestEntity& other) const { return id < other.id; } +}; + +TEST(LostEntityTrackerTest, NoEntitiesLost) { + LostEntityTracker<TestEntity> lost_entity_tracker; + TestEntity entity_1{1}; + TestEntity entity_2{2}; + TestEntity entity_3{3}; + + // Discover some entities. + lost_entity_tracker.RecordFoundEntity(entity_1); + lost_entity_tracker.RecordFoundEntity(entity_2); + lost_entity_tracker.RecordFoundEntity(entity_3); + + // Make sure none are lost on the first round. + ASSERT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); + + // Rediscover the same entities. + lost_entity_tracker.RecordFoundEntity(entity_1); + lost_entity_tracker.RecordFoundEntity(entity_2); + lost_entity_tracker.RecordFoundEntity(entity_3); + + // Make sure we still didn't lose any entities. + EXPECT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); +} + +TEST(LostEntityTrackerTest, AllEntitiesLost) { + LostEntityTracker<TestEntity> lost_entity_tracker; + TestEntity entity_1{1}; + TestEntity entity_2{2}; + TestEntity entity_3{3}; + + // Discover some entities. + lost_entity_tracker.RecordFoundEntity(entity_1); + lost_entity_tracker.RecordFoundEntity(entity_2); + lost_entity_tracker.RecordFoundEntity(entity_3); + + // Make sure none are lost on the first round. + EXPECT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); + + // Go through a round without rediscovering any entities. + typename LostEntityTracker<TestEntity>::EntitySet lost_entities = + lost_entity_tracker.ComputeLostEntities(); + EXPECT_TRUE(lost_entities.find(entity_1) != lost_entities.end()); + EXPECT_TRUE(lost_entities.find(entity_2) != lost_entities.end()); + EXPECT_TRUE(lost_entities.find(entity_3) != lost_entities.end()); +} + +TEST(LostEntityTrackerTest, SomeEntitiesLost) { + LostEntityTracker<TestEntity> lost_entity_tracker; + TestEntity entity_1{1}; + TestEntity entity_2{2}; + TestEntity entity_3{3}; + + // Discover some entities. + lost_entity_tracker.RecordFoundEntity(entity_1); + lost_entity_tracker.RecordFoundEntity(entity_2); + + // Make sure none are lost on the first round. + EXPECT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); + + // Go through the next round only rediscovering one of our entities and + // discovering an additional entity as well. Then, verify that only one entity + // was lost after the check. + lost_entity_tracker.RecordFoundEntity(entity_1); + lost_entity_tracker.RecordFoundEntity(entity_3); + typename LostEntityTracker<TestEntity>::EntitySet lost_entities = + lost_entity_tracker.ComputeLostEntities(); + EXPECT_TRUE(lost_entities.find(entity_1) == lost_entities.end()); + EXPECT_TRUE(lost_entities.find(entity_2) != lost_entities.end()); + EXPECT_TRUE(lost_entities.find(entity_3) == lost_entities.end()); +} + +TEST(LostEntityTrackerTest, SameEntityMultipleCopies) { + LostEntityTracker<TestEntity> lost_entity_tracker; + TestEntity entity_1{1}; + TestEntity entity_1_copy{1}; + + // Discover an entity. + lost_entity_tracker.RecordFoundEntity(entity_1); + + // Make sure none are lost on the first round. + EXPECT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); + + // Rediscover the same entity, but through a copy of it. + lost_entity_tracker.RecordFoundEntity(entity_1_copy); + + // Make sure none are lost on the second round. + EXPECT_TRUE(lost_entity_tracker.ComputeLostEntities().empty()); + + // Go through a round without rediscovering any entities and verify that we + // lost an entity equivalent to both copies of it. + typename LostEntityTracker<TestEntity>::EntitySet lost_entities = + lost_entity_tracker.ComputeLostEntities(); + EXPECT_EQ(lost_entities.size(), 1); + EXPECT_TRUE(lost_entities.find(entity_1) != lost_entities.end()); + EXPECT_TRUE(lost_entities.find(entity_1_copy) != lost_entities.end()); +} + +} // namespace +} // namespace mediums +} // namespace connections +} // namespace nearby +} // namespace location |