Jlm
Loading...
Searching...
No Matches
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
9
10TEST(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
31TEST(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
53TEST(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
78TEST(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
107TEST(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