• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "test/pc/e2e/analyzer/video/names_collection.h"
12 
13 #include <string>
14 #include <vector>
15 
16 #include "absl/types/optional.h"
17 #include "test/gmock.h"
18 #include "test/gtest.h"
19 
20 namespace webrtc {
21 namespace {
22 
23 using ::testing::Eq;
24 using ::testing::Ne;
25 
TEST(NamesCollectionTest,NamesFromCtorHasUniqueIndexes)26 TEST(NamesCollectionTest, NamesFromCtorHasUniqueIndexes) {
27   NamesCollection collection(std::vector<std::string>{"alice", "bob"});
28 
29   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
30   EXPECT_TRUE(collection.HasName("alice"));
31   EXPECT_THAT(collection.name(collection.index("alice")), Eq("alice"));
32 
33   EXPECT_TRUE(collection.HasName("bob"));
34   EXPECT_THAT(collection.name(collection.index("bob")), Eq("bob"));
35 
36   EXPECT_THAT(collection.index("bob"), Ne(collection.index("alice")));
37 }
38 
TEST(NamesCollectionTest,AddedNamesHasIndexes)39 TEST(NamesCollectionTest, AddedNamesHasIndexes) {
40   NamesCollection collection(std::vector<std::string>{});
41   collection.AddIfAbsent("alice");
42 
43   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
44   EXPECT_TRUE(collection.HasName("alice"));
45   EXPECT_THAT(collection.name(collection.index("alice")), Eq("alice"));
46 }
47 
TEST(NamesCollectionTest,AddBobDoesNotChangeAliceIndex)48 TEST(NamesCollectionTest, AddBobDoesNotChangeAliceIndex) {
49   NamesCollection collection(std::vector<std::string>{"alice"});
50 
51   size_t alice_index = collection.index("alice");
52 
53   collection.AddIfAbsent("bob");
54 
55   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
56   EXPECT_THAT(collection.index("alice"), Eq(alice_index));
57   EXPECT_THAT(collection.index("bob"), Ne(alice_index));
58 }
59 
TEST(NamesCollectionTest,AddAliceSecondTimeDoesNotChangeIndex)60 TEST(NamesCollectionTest, AddAliceSecondTimeDoesNotChangeIndex) {
61   NamesCollection collection(std::vector<std::string>{"alice"});
62 
63   size_t alice_index = collection.index("alice");
64 
65   EXPECT_THAT(collection.AddIfAbsent("alice"), Eq(alice_index));
66 
67   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
68   EXPECT_THAT(collection.index("alice"), Eq(alice_index));
69 }
70 
TEST(NamesCollectionTest,RemoveRemovesFromCollectionButNotIndex)71 TEST(NamesCollectionTest, RemoveRemovesFromCollectionButNotIndex) {
72   NamesCollection collection(std::vector<std::string>{"alice", "bob"});
73 
74   size_t bob_index = collection.index("bob");
75 
76   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
77 
78   EXPECT_THAT(collection.RemoveIfPresent("bob"),
79               Eq(absl::optional<size_t>(bob_index)));
80 
81   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
82   EXPECT_FALSE(collection.HasName("bob"));
83 
84   EXPECT_THAT(collection.index("bob"), Eq(bob_index));
85   EXPECT_THAT(collection.name(bob_index), Eq("bob"));
86 }
87 
TEST(NamesCollectionTest,RemoveOfAliceDoesNotChangeBobIndex)88 TEST(NamesCollectionTest, RemoveOfAliceDoesNotChangeBobIndex) {
89   NamesCollection collection(std::vector<std::string>{"alice", "bob"});
90 
91   size_t alice_index = collection.index("alice");
92   size_t bob_index = collection.index("bob");
93 
94   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
95 
96   EXPECT_THAT(collection.RemoveIfPresent("alice"),
97               Eq(absl::optional<size_t>(alice_index)));
98 
99   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
100   EXPECT_THAT(collection.index("bob"), Eq(bob_index));
101   EXPECT_THAT(collection.name(bob_index), Eq("bob"));
102 }
103 
TEST(NamesCollectionTest,RemoveSecondTimeHasNoEffect)104 TEST(NamesCollectionTest, RemoveSecondTimeHasNoEffect) {
105   NamesCollection collection(std::vector<std::string>{"bob"});
106 
107   size_t bob_index = collection.index("bob");
108 
109   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
110   EXPECT_THAT(collection.RemoveIfPresent("bob"),
111               Eq(absl::optional<size_t>(bob_index)));
112 
113   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(0)));
114   EXPECT_THAT(collection.RemoveIfPresent("bob"), Eq(absl::nullopt));
115 }
116 
TEST(NamesCollectionTest,RemoveOfNotExistingHasNoEffect)117 TEST(NamesCollectionTest, RemoveOfNotExistingHasNoEffect) {
118   NamesCollection collection(std::vector<std::string>{"bob"});
119 
120   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
121   EXPECT_THAT(collection.RemoveIfPresent("alice"), Eq(absl::nullopt));
122   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
123 }
124 
TEST(NamesCollectionTest,AddRemoveAddPreserveTheIndex)125 TEST(NamesCollectionTest, AddRemoveAddPreserveTheIndex) {
126   NamesCollection collection(std::vector<std::string>{});
127 
128   size_t alice_index = collection.AddIfAbsent("alice");
129   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
130 
131   EXPECT_THAT(collection.RemoveIfPresent("alice"),
132               Eq(absl::optional<size_t>(alice_index)));
133   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(0)));
134 
135   EXPECT_THAT(collection.AddIfAbsent("alice"), Eq(alice_index));
136   EXPECT_THAT(collection.index("alice"), Eq(alice_index));
137   EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
138 }
139 
TEST(NamesCollectionTest,GetKnownSizeReturnsForRemovedNames)140 TEST(NamesCollectionTest, GetKnownSizeReturnsForRemovedNames) {
141   NamesCollection collection(std::vector<std::string>{});
142 
143   size_t alice_index = collection.AddIfAbsent("alice");
144   EXPECT_THAT(collection.GetKnownSize(), Eq(static_cast<size_t>(1)));
145 
146   EXPECT_THAT(collection.RemoveIfPresent("alice"),
147               Eq(absl::optional<size_t>(alice_index)));
148   EXPECT_THAT(collection.GetKnownSize(), Eq(static_cast<size_t>(1)));
149 }
150 
151 }  // namespace
152 }  // namespace webrtc
153