Jlm
WorklistTests.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2024 HÃ¥vard Krogstie <krogstie.havard@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
8 #include <jlm/util/Worklist.hpp>
9 
10 TEST(WorklistTests, TestLifoWorklist)
11 {
13  EXPECT_FALSE(wl.HasMoreWorkItems());
14  wl.PushWorkItem(5);
15  wl.PushWorkItem(2);
16  wl.PushWorkItem(5);
17 
18  EXPECT_TRUE(wl.HasMoreWorkItems());
19  auto item = wl.PopWorkItem();
20  EXPECT_EQ(item, 2u);
21 
22  wl.PushWorkItem(7);
23  item = wl.PopWorkItem();
24  EXPECT_EQ(item, 7u);
25 
26  item = wl.PopWorkItem();
27  EXPECT_EQ(item, 5u);
28  EXPECT_FALSE(wl.HasMoreWorkItems());
29 }
30 
31 TEST(WorklistTests, TestFifoWorklist)
32 {
34  EXPECT_FALSE(wl.HasMoreWorkItems());
35  wl.PushWorkItem(5);
36  wl.PushWorkItem(2);
37  wl.PushWorkItem(5);
38 
39  EXPECT_TRUE(wl.HasMoreWorkItems());
40  auto item = wl.PopWorkItem();
41  EXPECT_EQ(item, 5u);
42 
43  wl.PushWorkItem(7);
44 
45  item = wl.PopWorkItem();
46  EXPECT_EQ(item, 2u);
47 
48  item = wl.PopWorkItem();
49  EXPECT_EQ(item, 7u);
50  EXPECT_FALSE(wl.HasMoreWorkItems());
51 }
52 
53 TEST(WorklistTests, TestLrfWorklist)
54 {
56  EXPECT_FALSE(wl.HasMoreWorkItems());
57  wl.PushWorkItem(5);
58 
59  EXPECT_TRUE(wl.HasMoreWorkItems());
60  auto item = wl.PopWorkItem();
61  EXPECT_EQ(item, 5u);
62 
63  wl.PushWorkItem(7);
64  wl.PushWorkItem(5);
65 
66  item = wl.PopWorkItem();
67  EXPECT_EQ(item, 7u);
68 
69  wl.PushWorkItem(2);
70  item = wl.PopWorkItem();
71  EXPECT_EQ(item, 2u);
72 
73  item = wl.PopWorkItem();
74  EXPECT_EQ(item, 5u);
75  EXPECT_FALSE(wl.HasMoreWorkItems());
76 }
77 
78 TEST(WorklistTests, TestTwoPhaseLrfWorklist)
79 {
81  EXPECT_FALSE(wl.HasMoreWorkItems());
82  wl.PushWorkItem(5);
83 
84  EXPECT_TRUE(wl.HasMoreWorkItems());
85  auto item = wl.PopWorkItem();
86  EXPECT_EQ(item, 5u);
87 
88  // These items are both pushed to next
89  wl.PushWorkItem(7);
90  wl.PushWorkItem(5);
91 
92  // Popping moves both items from next to current, and 7 has been fired least recently (never)
93  item = wl.PopWorkItem();
94  EXPECT_EQ(item, 7u);
95 
96  // Pushing 2 goes to next
97  wl.PushWorkItem(2);
98  // We still pop 5, since 5 is on the current list, despite 2 being less recently fired
99  item = wl.PopWorkItem();
100  EXPECT_EQ(item, 5u);
101 
102  item = wl.PopWorkItem();
103  EXPECT_EQ(item, 2u);
104  EXPECT_FALSE(wl.HasMoreWorkItems());
105 }
106 
107 TEST(WorklistTests, TestWorkset)
108 {
110  EXPECT_FALSE(ws.HasMoreWorkItems());
111  EXPECT_FALSE(ws.HasWorkItem(7));
112  ws.PushWorkItem(7);
113  EXPECT_TRUE(ws.HasMoreWorkItems());
114  EXPECT_TRUE(ws.HasWorkItem(7));
115  ws.PushWorkItem(5);
116  EXPECT_TRUE(ws.HasWorkItem(5));
117  EXPECT_TRUE(ws.HasWorkItem(7));
118  ws.RemoveWorkItem(7);
119  EXPECT_FALSE(ws.HasWorkItem(7));
120  EXPECT_TRUE(ws.HasWorkItem(5));
121  ws.RemoveWorkItem(5);
122  EXPECT_FALSE(ws.HasMoreWorkItems());
123 }
TEST(WorklistTests, TestLifoWorklist)
void PushWorkItem(T item) override
Definition: Worklist.hpp:143
bool HasMoreWorkItems() const noexcept override
Definition: Worklist.hpp:127
T PopWorkItem() override
Definition: Worklist.hpp:133
bool HasMoreWorkItems() const noexcept override
Definition: Worklist.hpp:82
T PopWorkItem() override
Definition: Worklist.hpp:88
void PushWorkItem(T item) override
Definition: Worklist.hpp:98
bool HasMoreWorkItems() const noexcept override
Definition: Worklist.hpp:177
T PopWorkItem() override
Definition: Worklist.hpp:183
void PushWorkItem(T item) override
Definition: Worklist.hpp:194
void PushWorkItem(T item) override
Definition: Worklist.hpp:267
bool HasMoreWorkItems() const noexcept override
Definition: Worklist.hpp:244
bool HasWorkItem(T item) const noexcept
Definition: Worklist.hpp:332
bool HasMoreWorkItems() const noexcept override
Definition: Worklist.hpp:314
void RemoveWorkItem(T item)
Definition: Worklist.hpp:338
void PushWorkItem(T item) override
Definition: Worklist.hpp:326