1 //===- llvm/unittest/ADT/PriorityWorklist.cpp -----------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // PriorityWorklist unit tests. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/ADT/PriorityWorklist.h" 15 #include "gtest/gtest.h" 16 17 namespace { 18 19 using namespace llvm; 20 21 template <typename T> class PriorityWorklistTest : public ::testing::Test {}; 22 typedef ::testing::Types<PriorityWorklist<int>, SmallPriorityWorklist<int, 2>> 23 TestTypes; 24 TYPED_TEST_CASE(PriorityWorklistTest, TestTypes); 25 26 TYPED_TEST(PriorityWorklistTest, Basic) { 27 TypeParam W; 28 EXPECT_TRUE(W.empty()); 29 EXPECT_EQ(0u, W.size()); 30 EXPECT_FALSE(W.count(42)); 31 32 EXPECT_TRUE(W.insert(21)); 33 EXPECT_TRUE(W.insert(42)); 34 EXPECT_TRUE(W.insert(17)); 35 36 EXPECT_FALSE(W.empty()); 37 EXPECT_EQ(3u, W.size()); 38 EXPECT_TRUE(W.count(42)); 39 40 EXPECT_FALSE(W.erase(75)); 41 EXPECT_EQ(3u, W.size()); 42 EXPECT_EQ(17, W.back()); 43 44 EXPECT_TRUE(W.erase(17)); 45 EXPECT_FALSE(W.count(17)); 46 EXPECT_EQ(2u, W.size()); 47 EXPECT_EQ(42, W.back()); 48 49 W.clear(); 50 EXPECT_TRUE(W.empty()); 51 EXPECT_EQ(0u, W.size()); 52 53 EXPECT_TRUE(W.insert(21)); 54 EXPECT_TRUE(W.insert(42)); 55 EXPECT_TRUE(W.insert(12)); 56 EXPECT_TRUE(W.insert(17)); 57 EXPECT_TRUE(W.count(12)); 58 EXPECT_TRUE(W.count(17)); 59 EXPECT_EQ(4u, W.size()); 60 EXPECT_EQ(17, W.back()); 61 EXPECT_TRUE(W.erase(12)); 62 EXPECT_FALSE(W.count(12)); 63 EXPECT_TRUE(W.count(17)); 64 EXPECT_EQ(3u, W.size()); 65 EXPECT_EQ(17, W.back()); 66 67 EXPECT_FALSE(W.insert(42)); 68 EXPECT_EQ(3u, W.size()); 69 EXPECT_EQ(42, W.pop_back_val()); 70 EXPECT_EQ(17, W.pop_back_val()); 71 EXPECT_EQ(21, W.pop_back_val()); 72 EXPECT_TRUE(W.empty()); 73 } 74 75 TYPED_TEST(PriorityWorklistTest, EraseIf) { 76 TypeParam W; 77 W.insert(23); 78 W.insert(10); 79 W.insert(47); 80 W.insert(42); 81 W.insert(23); 82 W.insert(13); 83 W.insert(26); 84 W.insert(42); 85 EXPECT_EQ(6u, W.size()); 86 87 EXPECT_FALSE(W.erase_if([](int i) { return i > 100; })); 88 EXPECT_EQ(6u, W.size()); 89 EXPECT_EQ(42, W.back()); 90 91 EXPECT_TRUE(W.erase_if([](int i) { 92 assert(i != 0 && "Saw a null value!"); 93 return (i & 1) == 0; 94 })); 95 EXPECT_EQ(3u, W.size()); 96 EXPECT_FALSE(W.count(42)); 97 EXPECT_FALSE(W.count(26)); 98 EXPECT_FALSE(W.count(10)); 99 EXPECT_FALSE(W.insert(47)); 100 EXPECT_FALSE(W.insert(23)); 101 EXPECT_EQ(23, W.pop_back_val()); 102 EXPECT_EQ(47, W.pop_back_val()); 103 EXPECT_EQ(13, W.pop_back_val()); 104 } 105 106 } 107