From 206787255b380640812d2850ad3d858799d45398 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 5 May 2023 00:08:32 +0300 Subject: [PATCH] Add an Actor test. --- tdactor/test/actors_workers.cpp | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tdactor/test/actors_workers.cpp b/tdactor/test/actors_workers.cpp index 92dc8f7ae..720aa2fe8 100644 --- a/tdactor/test/actors_workers.cpp +++ b/tdactor/test/actors_workers.cpp @@ -10,6 +10,7 @@ #include "td/utils/common.h" #include "td/utils/SliceBuilder.h" #include "td/utils/tests.h" +#include "td/utils/Time.h" class PowerWorker final : public td::Actor { public: @@ -147,3 +148,41 @@ TEST(Actors, workers_small_query_two_threads) { TEST(Actors, workers_small_query_nine_threads) { test_workers(9, 10, 10000, 1); } + +class SenderActor; + +class ReceiverActor final : public td::Actor { + public: + void receive(td::ActorId) { + } +}; + +class SenderActor final : public td::Actor { + public: + explicit SenderActor(td::ActorId actor_id) : actor_id_(std::move(actor_id)) { + } + + private: + td::ActorId actor_id_; + + void loop() final { + for (int i = 0; i < 10000; i++) { + send_closure(actor_id_, &ReceiverActor::receive, actor_id(this)); + } + set_timeout_in(0.001); + } +}; + +TEST(Actors, send_closure_while_finish) { + td::ConcurrentScheduler sched(1, 0); + + auto receiver = sched.create_actor_unsafe(0, "ReceiverActor").release(); + sched.create_actor_unsafe(1, "SenderActor", receiver).release(); + + sched.start(); + auto end_time = td::Time::now() + 0.2; + while (td::Time::now() < end_time) { + sched.run_main(0.1); + } + sched.finish(); +}