#include "../fixtures/util.hpp" #include #include #include #include using namespace mbgl::util; class TestThread { public: TestThread(WorkQueue* queue_) : queue(queue_) {} void send(std::function&& fn) { EXPECT_TRUE(ThreadContext::currentlyOn(ThreadType::Map)); queue->push(std::move(fn)); } private: WorkQueue* queue; }; TEST(WorkQueue, push) { RunLoop loop; WorkQueue queue; Thread thread({"Test", ThreadType::Map, ThreadPriority::Regular}, &queue); uint8_t count = 0; auto endTest = [&]() { EXPECT_TRUE(ThreadContext::currentlyOn(ThreadType::Main)); if (++count == 4) { loop.stop(); } }; thread.invoke(&TestThread::send, endTest); thread.invoke(&TestThread::send, endTest); thread.invoke(&TestThread::send, endTest); thread.invoke(&TestThread::send, endTest); loop.run(); } TEST(WorkQueue, cancel) { RunLoop loop; WorkQueue queue; auto work = [&]() { FAIL() << "Should never be called"; }; queue.push(work); queue.push(work); queue.push(work); queue.push(work); queue.push(work); }