Skip to content

Commit 805756d

Browse files
author
Jan Wilmans
committed
added two test cases for executor order of execution
1 parent b1f6c77 commit 805756d

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

application/CobaltFusionTest/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
project(CobaltFusionTest)
22

3-
add_executable(${PROJECT_NAME} CobaltFusionTest.cpp)
3+
add_executable(${PROJECT_NAME} CobaltFusionTest.cpp TestExecutor.cpp TestGuiExecutor.cpp)
44

55
target_link_libraries(${PROJECT_NAME}
66
PRIVATE

application/CobaltFusionTest/TestGuiExecutor.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <boost/test/unit_test_gui.hpp>
88
#include "CobaltFusion/GuiExecutor.h"
99

10+
using namespace std::chrono_literals;
11+
1012
namespace fusion {
1113

1214
BOOST_AUTO_TEST_SUITE(TestExecutor)
@@ -55,6 +57,58 @@ BOOST_AUTO_TEST_CASE(TestGuiExecutor)
5557
testThread.join();
5658
}
5759

60+
void TestGuiExecutionOrderImpl(GuiExecutor& executor)
61+
{
62+
enum class mark
63+
{
64+
unset,
65+
scheduled_call,
66+
immediate
67+
};
68+
69+
mark task_mark = mark::unset;
70+
71+
auto scheduled_call = executor.CallAfter(5min, [&] { task_mark = mark::scheduled_call; });
72+
executor.Call([&] { task_mark = mark::immediate; });
73+
scheduled_call.Cancel();
74+
BOOST_CHECK(task_mark == mark::immediate);
75+
}
76+
77+
BOOST_AUTO_TEST_CASE(TestGuiExecutionOrder)
78+
{
79+
GuiExecutor executor;
80+
std::thread testThread([&executor]() { TestGuiExecutionOrderImpl(executor); });
81+
82+
bool elapsed = false;
83+
executor.CallAfter(1s, [&executor, &elapsed]() { elapsed = true; });
84+
85+
GuiWaitFor([&executor, &elapsed]() { return elapsed; });
86+
87+
testThread.join();
88+
}
89+
90+
void TestActiveExecutorOrderImpl(ActiveExecutor& executor)
91+
{
92+
enum class mark
93+
{
94+
unset,
95+
scheduled_call,
96+
immediate
97+
};
98+
99+
mark task_mark = mark::unset;
100+
101+
auto scheduled_call = executor.CallAfter(5min, [&] { task_mark = mark::scheduled_call; });
102+
executor.Call([&] { task_mark = mark::immediate; });
103+
scheduled_call.Cancel();
104+
BOOST_CHECK(task_mark == mark::immediate);
105+
}
106+
107+
BOOST_AUTO_TEST_CASE(TestActiveExecutionOrder)
108+
{
109+
ActiveExecutor executor;
110+
TestActiveExecutorOrderImpl(executor);
111+
}
58112
BOOST_AUTO_TEST_SUITE_END()
59113

60114
} // namespace fusion

0 commit comments

Comments
 (0)