35 EXPECT_TRUE(stack.
empty());
37 EXPECT_FALSE(stack.
try_pop(value));
39 auto sh_value = stack.
try_pop();
40 EXPECT_FALSE(sh_value);
50 EXPECT_FALSE(stack.
empty());
52 EXPECT_TRUE(stack.
try_pop(value));
57 EXPECT_EQ(*result.get(), 43);
68 EXPECT_FALSE(stack.
empty());
70 EXPECT_TRUE(stack.
try_pop(value));
77 EXPECT_EQ(*result.get(), 44);
80 auto sh_value = stack.
try_pop();
81 EXPECT_FALSE(sh_value);
90 std::promise<void> go, push_ready_for_test, pop_ready_for_test;
91 std::shared_future<void> ready(go.get_future());
92 std::future<void> push_done;
93 std::future<std::shared_ptr<int>> pop_done;
97 push_done = std::async(std::launch::async, [&stack, ready, &push_ready_for_test]() {
98 push_ready_for_test.set_value();
104 pop_done = std::async(std::launch::async, [&stack, ready, &pop_ready_for_test]() {
105 pop_ready_for_test.set_value();
111 push_ready_for_test.get_future().wait();
112 pop_ready_for_test.get_future().wait();
120 EXPECT_EQ(*pop_done.get(), 42);
121 EXPECT_TRUE(stack.
empty());
134 std::promise<void> go, pop_ready_for_test;
135 std::shared_future<void> ready(go.get_future());
136 std::future<std::shared_ptr<int>> pop_done;
140 pop_done = std::async(std::launch::async, [&stack, ready, &pop_ready_for_test]() {
141 pop_ready_for_test.set_value();
147 pop_ready_for_test.get_future().wait();
157 EXPECT_TRUE(stack.
empty());
Thread-safe stack borrowed from Anthony Williams, C++ Concurrency in Action, Second edition.
void update_top(T new_value)
Updates top value in a stack.
void stop()
Terminates waiting in wait_and_pop methods.
void wait_and_pop(T &value)
materialitems.h Collection of materials to populate MaterialModel.
TEST_F(ThreadSafeStackTest, initialState)
Checking stack initial state (single thread mode).