| Index: courgette/label_manager_unittest.cc
|
| diff --git a/courgette/label_manager_unittest.cc b/courgette/label_manager_unittest.cc
|
| index 4b91d92530d9c5c96d175dd2746a09fc1e2c7a1e..e95b5135faf29eaa58856dc085b805d20c863f25 100644
|
| --- a/courgette/label_manager_unittest.cc
|
| +++ b/courgette/label_manager_unittest.cc
|
| @@ -16,35 +16,23 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| +#include "courgette/image_utils.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace courgette {
|
|
|
| namespace {
|
|
|
| -// Test version of RvaVisitor: Just wrap std::vector<RVA>.
|
| -class TestRvaVisitor : public LabelManagerImpl::RvaVisitor {
|
| +class TestLabelManager : public LabelManager {
|
| public:
|
| - explicit TestRvaVisitor(std::vector<RVA>::const_iterator rva_begin,
|
| - std::vector<RVA>::const_iterator rva_end)
|
| - : rva_it_(rva_begin), rva_end_(rva_end) {}
|
| -
|
| - ~TestRvaVisitor() override {}
|
| -
|
| - size_t Remaining() const override { return std::distance(rva_it_, rva_end_); }
|
| -
|
| - RVA Get() const override { return *rva_it_; }
|
| -
|
| - void Next() override { ++rva_it_; }
|
| -
|
| - private:
|
| - std::vector<RVA>::const_iterator rva_it_;
|
| - std::vector<RVA>::const_iterator rva_end_;
|
| + void SetLabels(const LabelVector& labels) {
|
| + labels_ = labels;
|
| + };
|
| };
|
|
|
| void CheckLabelManagerContent(LabelManager* label_manager,
|
| const std::map<RVA, int32_t>& expected) {
|
| - EXPECT_EQ(expected.size(), label_manager->Size());
|
| + EXPECT_EQ(expected.size(), label_manager->Labels().size());
|
| for (const auto& rva_and_count : expected) {
|
| Label* label = label_manager->Find(rva_and_count.first);
|
| EXPECT_TRUE(label != nullptr);
|
| @@ -111,18 +99,18 @@ std::string EncodeLabelIndexes(const LabelVector& labels) {
|
|
|
| } // namespace
|
|
|
| -TEST(LabelManagerTest, GetIndexBound_LabelVector) {
|
| +TEST(LabelManagerTest, GetLabelIndexBound) {
|
| LabelVector labels0;
|
| - EXPECT_EQ(0, LabelManager::GetIndexBound(labels0));
|
| + EXPECT_EQ(0, LabelManager::GetLabelIndexBound(labels0));
|
|
|
| LabelVector labels1_uninit = CreateLabelVectorBasic(1);
|
| ASSERT_EQ(1U, labels1_uninit.size());
|
| - EXPECT_EQ(0, LabelManager::GetIndexBound(labels1_uninit));
|
| + EXPECT_EQ(0, LabelManager::GetLabelIndexBound(labels1_uninit));
|
|
|
| LabelVector labels1_init = CreateLabelVectorBasic(1);
|
| ASSERT_EQ(1U, labels1_init.size());
|
| labels1_init[0].index_ = 99;
|
| - EXPECT_EQ(100, LabelManager::GetIndexBound(labels1_init));
|
| + EXPECT_EQ(100, LabelManager::GetLabelIndexBound(labels1_init));
|
|
|
| LabelVector labels6_mixed = CreateLabelVectorBasic(6);
|
| ASSERT_EQ(6U, labels6_mixed.size());
|
| @@ -130,28 +118,7 @@ TEST(LabelManagerTest, GetIndexBound_LabelVector) {
|
| labels6_mixed[2].index_ = 2;
|
| labels6_mixed[4].index_ = 15;
|
| labels6_mixed[5].index_ = 7;
|
| - EXPECT_EQ(16, LabelManager::GetIndexBound(labels6_mixed));
|
| -}
|
| -
|
| -TEST(LabelManagerTest, GetIndexBound_RVAToLabel) {
|
| - RVAToLabel labels_map0;
|
| - EXPECT_EQ(0, LabelManager::GetIndexBound(labels_map0));
|
| -
|
| - RVAToLabel labels1_map_init;
|
| - Label label1(static_cast<RVA>(0), 99, 1);
|
| - labels1_map_init[label1.rva_] = &label1;
|
| - EXPECT_EQ(100, LabelManager::GetIndexBound(labels1_map_init));
|
| -
|
| - RVAToLabel labels_map6_mixed;
|
| - Label labels6[] = {
|
| - Label(static_cast<RVA>(1), 5, 1),
|
| - Label(static_cast<RVA>(2), 2, 1),
|
| - Label(static_cast<RVA>(4), 15, 1),
|
| - Label(static_cast<RVA>(5), 7, 1)
|
| - };
|
| - for (Label& label : labels6)
|
| - labels_map6_mixed[label.rva_] = &label;
|
| - EXPECT_EQ(16, LabelManager::GetIndexBound(labels_map6_mixed));
|
| + EXPECT_EQ(16, LabelManager::GetLabelIndexBound(labels6_mixed));
|
| }
|
|
|
| TEST(LabelManagerTest, Basic) {
|
| @@ -169,10 +136,10 @@ TEST(LabelManagerTest, Basic) {
|
| };
|
| std::vector<RVA> test_targets(std::begin(kTestTargetsRaw),
|
| std::end(kTestTargetsRaw));
|
| - TestRvaVisitor visitor(test_targets.begin(), test_targets.end());
|
| + TrivialRvaVisitor visitor(test_targets);
|
|
|
| // Preallocate targets, then populate.
|
| - LabelManagerImpl label_manager;
|
| + TestLabelManager label_manager;
|
| label_manager.Read(&visitor);
|
|
|
| static const std::pair<RVA, int32_t> kExpected1Raw[] = {
|
| @@ -205,10 +172,10 @@ TEST(LabelManagerTest, Single) {
|
| for (int dup = 1; dup < 8; ++dup) {
|
| // Test data: |dup| copies of kRva.
|
| std::vector<RVA> test_targets(dup, kRva);
|
| - TestRvaVisitor visitor(test_targets.begin(), test_targets.end());
|
| - LabelManagerImpl label_manager;
|
| + TrivialRvaVisitor visitor(test_targets);
|
| + TestLabelManager label_manager;
|
| label_manager.Read(&visitor);
|
| - EXPECT_EQ(1U, label_manager.Size()); // Deduped to 1 Label.
|
| + EXPECT_EQ(1U, label_manager.Labels().size()); // Deduped to 1 Label.
|
|
|
| Label* label = label_manager.Find(kRva);
|
| EXPECT_NE(nullptr, label);
|
| @@ -224,16 +191,16 @@ TEST(LabelManagerTest, Single) {
|
|
|
| TEST(LabelManagerTest, Empty) {
|
| std::vector<RVA> empty_test_targets;
|
| - TestRvaVisitor visitor(empty_test_targets.begin(), empty_test_targets.end());
|
| - LabelManagerImpl label_manager;
|
| + TrivialRvaVisitor visitor(empty_test_targets);
|
| + TestLabelManager label_manager;
|
| label_manager.Read(&visitor);
|
| - EXPECT_EQ(0U, label_manager.Size());
|
| + EXPECT_EQ(0U, label_manager.Labels().size());
|
| for (RVA rva = 0U; rva < 16U; ++rva)
|
| EXPECT_EQ(nullptr, label_manager.Find(rva));
|
| }
|
|
|
| TEST(LabelManagerTest, EmptyAssign) {
|
| - LabelManagerImpl label_manager_empty;
|
| + TestLabelManager label_manager_empty;
|
| label_manager_empty.DefaultAssignIndexes();
|
| label_manager_empty.UnassignIndexes();
|
| label_manager_empty.AssignRemainingIndexes();
|
| @@ -241,7 +208,7 @@ TEST(LabelManagerTest, EmptyAssign) {
|
|
|
| TEST(LabelManagerTest, TrivialAssign) {
|
| for (size_t size = 0; size < 20; ++size) {
|
| - LabelManagerImpl label_manager;
|
| + TestLabelManager label_manager;
|
| label_manager.SetLabels(CreateLabelVectorBasic(size));
|
|
|
| // Sanity check.
|
| @@ -267,7 +234,7 @@ TEST(LabelManagerTest, TrivialAssign) {
|
|
|
| // Tests SimpleIndexAssigner fill strategies independently.
|
| TEST(LabelManagerTest, SimpleIndexAssigner) {
|
| - using SimpleIndexAssigner = LabelManagerImpl::SimpleIndexAssigner;
|
| + using SimpleIndexAssigner = LabelManager::SimpleIndexAssigner;
|
| // See CreateLabelVectorWithIndexes() explanation on how we encode LabelVector
|
| // |index_| values as a string.
|
| const struct TestCase {
|
| @@ -384,7 +351,7 @@ TEST(LabelManagerTest, AssignRemainingIndexes) {
|
| {"..FE..GD..", "ABFECHGDIJ"}, // Forward: "AB"; backward: "IJ"; in: "CH".
|
| };
|
| for (const auto& test_case : kTestCases) {
|
| - LabelManagerImpl label_manager;
|
| + TestLabelManager label_manager;
|
| label_manager.SetLabels(CreateLabelVectorWithIndexes(test_case.input));
|
|
|
| label_manager.AssignRemainingIndexes();
|
|
|