blob: 0b5d6c978dcba4302c955f4b532201b4cad3cb11 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "crazy_linker_pointer_set.h"
#include <gtest/gtest.h>
namespace crazy {
TEST(PointerSet, DefaultIsEmpty) {
PointerSet set;
EXPECT_FALSE(set.Has(nullptr));
const Vector<const void*>& values = set.GetValuesForTesting();
EXPECT_TRUE(values.IsEmpty());
}
TEST(PointerSet, Has) {
PointerSet set;
// nullptr is a perfectly valid value in the set.
EXPECT_FALSE(set.Has(nullptr));
EXPECT_FALSE(set.Add(nullptr));
EXPECT_TRUE(set.Has(nullptr));
const Vector<const void*>& values = set.GetValuesForTesting();
EXPECT_FALSE(values.IsEmpty());
EXPECT_EQ(1U, values.GetCount());
EXPECT_EQ(nullptr, values[0]);
}
TEST(PointerSet, Add) {
PointerSet set;
auto* kOne = reinterpret_cast<void*>(1);
auto* kTwo = reinterpret_cast<void*>(2);
auto* kTen = reinterpret_cast<void*>(10);
EXPECT_FALSE(set.Add(kOne));
EXPECT_TRUE(set.Add(kOne));
EXPECT_FALSE(set.Add(kTen));
EXPECT_TRUE(set.Has(kOne));
EXPECT_FALSE(set.Has(kTwo));
EXPECT_TRUE(set.Has(kTen));
const Vector<const void*>& values = set.GetValuesForTesting();
EXPECT_FALSE(values.IsEmpty());
EXPECT_EQ(2U, values.GetCount());
EXPECT_EQ(kOne, values[0]);
EXPECT_EQ(kTen, values[1]);
}
TEST(PointerSet, Remove) {
PointerSet set;
auto* kOne = reinterpret_cast<void*>(1);
auto* kTwo = reinterpret_cast<void*>(2);
auto* kTen = reinterpret_cast<void*>(10);
EXPECT_FALSE(set.Add(kOne));
EXPECT_FALSE(set.Add(kTwo));
EXPECT_FALSE(set.Add(kTen));
EXPECT_TRUE(set.Has(kOne));
EXPECT_TRUE(set.Has(kTwo));
EXPECT_TRUE(set.Has(kTen));
const Vector<const void*>& values = set.GetValuesForTesting();
EXPECT_FALSE(values.IsEmpty());
EXPECT_EQ(3U, values.GetCount());
EXPECT_TRUE(set.Remove(kTwo));
EXPECT_TRUE(set.Has(kOne));
EXPECT_FALSE(set.Has(kTwo));
EXPECT_TRUE(set.Has(kTen));
EXPECT_FALSE(values.IsEmpty());
EXPECT_EQ(2U, values.GetCount());
EXPECT_FALSE(set.Remove(kTwo));
EXPECT_FALSE(values.IsEmpty());
EXPECT_EQ(2U, values.GetCount());
EXPECT_EQ(2U, values.GetCount());
EXPECT_EQ(kOne, values[0]);
EXPECT_EQ(kTen, values[1]);
}
} // namespace crazy