Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
tesh conversion
[simgrid.git] / teshsuite / s4u / listen_async / listen_async.cpp
1 /* Bug report: https://github.com/simgrid/simgrid/issues/40
2  *
3  * Task.listen used to be on async mailboxes as it always returned false.
4  * This occures in Java and C, but is only tested here in C.
5  */
6
7 #include "simgrid/s4u.hpp"
8
9 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
10
11 static void server()
12 {
13   simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mailbox");
14
15   simgrid::s4u::this_actor::isend(mailbox, xbt_strdup("Some data"), 0);
16
17   xbt_assert(mailbox->listen()); // True (1)
18   XBT_INFO("Task listen works on regular mailboxes");
19   char* res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));
20
21   xbt_assert(!strcmp("Some data", res), "Data received: %s", res);
22   XBT_INFO("Data successfully received from regular mailbox");
23   xbt_free(res);
24
25   simgrid::s4u::MailboxPtr mailbox2 = simgrid::s4u::Mailbox::byName("mailbox2");
26   mailbox2->setReceiver(simgrid::s4u::Actor::self());
27
28   simgrid::s4u::this_actor::isend(mailbox2, xbt_strdup("More data"), 0);
29
30   xbt_assert(mailbox2->listen()); // used to break.
31   XBT_INFO("Task listen works on asynchronous mailboxes");
32
33   res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox2));
34   xbt_assert(!strcmp("More data", res));
35   xbt_free(res);
36
37   XBT_INFO("Data successfully received from asynchronous mailbox");
38 }
39
40 int main(int argc, char* argv[])
41 {
42   simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv);
43   e->loadPlatform(argv[1]);
44
45   simgrid::s4u::Actor::createActor("test", simgrid::s4u::Host::by_name("Tremblay"), server);
46
47   e->run();
48   return 0;
49 }