Bug: b/243115145 Change-Id: Ib375bc7373e3c70a05e8fe6ddd156bb524cc6f99 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/272548 Commit-Queue: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Auto-Submit: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37860}
153 lines
5.1 KiB
C++
153 lines
5.1 KiB
C++
/*
|
|
* Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "test/pc/e2e/analyzer/video/names_collection.h"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "test/gmock.h"
|
|
#include "test/gtest.h"
|
|
|
|
namespace webrtc {
|
|
namespace {
|
|
|
|
using ::testing::Eq;
|
|
using ::testing::Ne;
|
|
|
|
TEST(NamesCollectionTest, NamesFromCtorHasUniqueIndexes) {
|
|
NamesCollection collection(std::vector<std::string>{"alice", "bob"});
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
|
|
EXPECT_TRUE(collection.HasName("alice"));
|
|
EXPECT_THAT(collection.name(collection.index("alice")), Eq("alice"));
|
|
|
|
EXPECT_TRUE(collection.HasName("bob"));
|
|
EXPECT_THAT(collection.name(collection.index("bob")), Eq("bob"));
|
|
|
|
EXPECT_THAT(collection.index("bob"), Ne(collection.index("alice")));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, AddedNamesHasIndexes) {
|
|
NamesCollection collection(std::vector<std::string>{});
|
|
collection.AddIfAbsent("alice");
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_TRUE(collection.HasName("alice"));
|
|
EXPECT_THAT(collection.name(collection.index("alice")), Eq("alice"));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, AddBobDoesNotChangeAliceIndex) {
|
|
NamesCollection collection(std::vector<std::string>{"alice"});
|
|
|
|
size_t alice_index = collection.index("alice");
|
|
|
|
collection.AddIfAbsent("bob");
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
|
|
EXPECT_THAT(collection.index("alice"), Eq(alice_index));
|
|
EXPECT_THAT(collection.index("bob"), Ne(alice_index));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, AddAliceSecondTimeDoesNotChangeIndex) {
|
|
NamesCollection collection(std::vector<std::string>{"alice"});
|
|
|
|
size_t alice_index = collection.index("alice");
|
|
|
|
EXPECT_THAT(collection.AddIfAbsent("alice"), Eq(alice_index));
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_THAT(collection.index("alice"), Eq(alice_index));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, RemoveRemovesFromCollectionButNotIndex) {
|
|
NamesCollection collection(std::vector<std::string>{"alice", "bob"});
|
|
|
|
size_t bob_index = collection.index("bob");
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
|
|
|
|
EXPECT_THAT(collection.RemoveIfPresent("bob"),
|
|
Eq(absl::optional<size_t>(bob_index)));
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_FALSE(collection.HasName("bob"));
|
|
|
|
EXPECT_THAT(collection.index("bob"), Eq(bob_index));
|
|
EXPECT_THAT(collection.name(bob_index), Eq("bob"));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, RemoveOfAliceDoesNotChangeBobIndex) {
|
|
NamesCollection collection(std::vector<std::string>{"alice", "bob"});
|
|
|
|
size_t alice_index = collection.index("alice");
|
|
size_t bob_index = collection.index("bob");
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(2)));
|
|
|
|
EXPECT_THAT(collection.RemoveIfPresent("alice"),
|
|
Eq(absl::optional<size_t>(alice_index)));
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_THAT(collection.index("bob"), Eq(bob_index));
|
|
EXPECT_THAT(collection.name(bob_index), Eq("bob"));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, RemoveSecondTimeHasNoEffect) {
|
|
NamesCollection collection(std::vector<std::string>{"bob"});
|
|
|
|
size_t bob_index = collection.index("bob");
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_THAT(collection.RemoveIfPresent("bob"),
|
|
Eq(absl::optional<size_t>(bob_index)));
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(0)));
|
|
EXPECT_THAT(collection.RemoveIfPresent("bob"), Eq(absl::nullopt));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, RemoveOfNotExistingHasNoEffect) {
|
|
NamesCollection collection(std::vector<std::string>{"bob"});
|
|
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
EXPECT_THAT(collection.RemoveIfPresent("alice"), Eq(absl::nullopt));
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, AddRemoveAddPreserveTheIndex) {
|
|
NamesCollection collection(std::vector<std::string>{});
|
|
|
|
size_t alice_index = collection.AddIfAbsent("alice");
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
|
|
EXPECT_THAT(collection.RemoveIfPresent("alice"),
|
|
Eq(absl::optional<size_t>(alice_index)));
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(0)));
|
|
|
|
EXPECT_THAT(collection.AddIfAbsent("alice"), Eq(alice_index));
|
|
EXPECT_THAT(collection.index("alice"), Eq(alice_index));
|
|
EXPECT_THAT(collection.size(), Eq(static_cast<size_t>(1)));
|
|
}
|
|
|
|
TEST(NamesCollectionTest, GetKnownSizeReturnsForRemovedNames) {
|
|
NamesCollection collection(std::vector<std::string>{});
|
|
|
|
size_t alice_index = collection.AddIfAbsent("alice");
|
|
EXPECT_THAT(collection.GetKnownSize(), Eq(static_cast<size_t>(1)));
|
|
|
|
EXPECT_THAT(collection.RemoveIfPresent("alice"),
|
|
Eq(absl::optional<size_t>(alice_index)));
|
|
EXPECT_THAT(collection.GetKnownSize(), Eq(static_cast<size_t>(1)));
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace webrtc
|