MCPcopy Create free account
hub / github.com/black-sliver/PopTracker / TEST

Function TEST

test/core/test_taskqueue.cpp:8–34  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6#include "../../src/core/taskqueue.hpp"
7
8TEST(TaskQueue, Cancel) {
9 pop::TaskQueue<int> queue;
10 std::mutex mutex;
11 std::unique_lock lock(mutex);
12 std::condition_variable cvStarted;
13 std::condition_variable cvDone;
14 const size_t first = queue.enqueue([&mutex, &cvStarted, &cvDone] {
15 std::unique_lock firstLock(mutex);
16 cvStarted.notify_all();
17 EXPECT_EQ(cvDone.wait_for(firstLock, std::chrono::seconds(1)), std::cv_status::no_timeout);
18 return 1;
19 });
20 EXPECT_FALSE(queue.cancel(first)); // about to start
21 // ^ This is an implementation detail, but covers an additional branch.
22 // Note: after the second enqueue, cancel(first) may succeed
23 const size_t second = queue.enqueue([] {
24 return 2;
25 });
26 ASSERT_EQ(cvStarted.wait_for(lock, std::chrono::seconds(1)), std::cv_status::no_timeout);
27 EXPECT_FALSE(queue.cancel(first)); // already running
28 EXPECT_TRUE(queue.cancel(second)); // ok, not running
29 EXPECT_FALSE(queue.cancel(second)); // already canceled
30 cvDone.notify_all();
31 lock.unlock();
32 queue.get(first);
33 EXPECT_FALSE(queue.cancel(first)); // already finished
34}
35
36TEST(TaskQueue, TryGet) {
37 pop::TaskQueue<int> queue;

Callers

nothing calls this directly

Calls 11

millisecondsFunction · 0.85
enqueueMethod · 0.80
tryGetMethod · 0.80
isDoneMethod · 0.80
push_backMethod · 0.80
cancelMethod · 0.45
unlockMethod · 0.45
getMethod · 0.45
valueMethod · 0.45
prioritizeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected