summaryrefslogtreecommitdiff
path: root/test/actor/actor_ref.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/actor/actor_ref.cpp')
-rw-r--r--test/actor/actor_ref.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/actor/actor_ref.cpp b/test/actor/actor_ref.cpp
new file mode 100644
index 0000000000..655529035f
--- /dev/null
+++ b/test/actor/actor_ref.cpp
@@ -0,0 +1,42 @@
+#include <mbgl/actor/actor.hpp>
+#include <mbgl/actor/thread_pool.hpp>
+
+#include <mbgl/test/util.hpp>
+
+#include <chrono>
+#include <functional>
+#include <future>
+
+using namespace mbgl;
+using namespace std::chrono_literals;
+
+TEST(ActorRef, CanOutliveActor) {
+ // An ActorRef can outlive its actor. Doing does not extend the actor's lifetime.
+ // Sending a message to an ActorRef whose actor has died is a no-op.
+
+ struct Test {
+ bool& died;
+
+ Test(ActorRef<Test>, bool& died_)
+ : died(died_) {
+ }
+
+ ~Test() {
+ died = true;
+ }
+
+ void receive() {
+ FAIL();
+ }
+ };
+
+ ThreadPool pool { 1 };
+ bool died = false;
+
+ ActorRef<Test> test = [&] () {
+ return Actor<Test>(pool, std::ref(died)).self();
+ }();
+
+ EXPECT_TRUE(died);
+ test.invoke(&Test::receive);
+}