xref: /llvm-project/llvm/unittests/ExecutionEngine/Orc/TaskDispatchTest.cpp (revision 89e6a288674c9fae33aeb5448c7b1fe782b2bf53)
1 //===----------- TaskDispatchTest.cpp - Test TaskDispatch APIs ------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/ExecutionEngine/Orc/TaskDispatch.h"
10 #include "llvm/Config/llvm-config.h" // for LLVM_ENABLE_THREADS
11 #include "gtest/gtest.h"
12 
13 #include <future>
14 
15 using namespace llvm;
16 using namespace llvm::orc;
17 
18 TEST(InPlaceTaskDispatchTest, GenericNamedTask) {
19   auto D = std::make_unique<InPlaceTaskDispatcher>();
20   bool B = false;
21   D->dispatch(makeGenericNamedTask([&]() { B = true; }));
22   EXPECT_TRUE(B);
23   D->shutdown();
24 }
25 
26 #if LLVM_ENABLE_THREADS
27 TEST(DynamicThreadPoolDispatchTest, GenericNamedTask) {
28   auto D = std::make_unique<DynamicThreadPoolTaskDispatcher>(std::nullopt);
29   std::promise<bool> P;
30   auto F = P.get_future();
31   D->dispatch(makeGenericNamedTask(
32       [P = std::move(P)]() mutable { P.set_value(true); }));
33   EXPECT_TRUE(F.get());
34   D->shutdown();
35 }
36 #endif
37