1 /* Copyright (c) 2017-2020. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 /* Bug report: https://github.com/simgrid/simgrid/issues/40
8 * Task.listen used to be on async mailboxes as it always returned false.
9 * This occurs in Java and C, but is only tested here in C.
12 #include "simgrid/s4u.hpp"
14 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
18 simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name("mailbox");
20 simgrid::s4u::CommPtr sendComm = mailbox->put_async(new std::string("Some data"), 0);
22 xbt_assert(mailbox->listen()); // True (1)
23 XBT_INFO("Task listen works on regular mailboxes");
24 XBT_INFO("Mailbox::listen_from() returns %ld (should return my pid, which is %ld)", mailbox->listen_from(),
25 simgrid::s4u::this_actor::get_pid());
27 const std::string* res = mailbox->get<std::string>();
29 xbt_assert(*res == "Some data", "Data received: %s", res->c_str());
30 XBT_INFO("Data successfully received from regular mailbox");
34 simgrid::s4u::Mailbox* mailbox2 = simgrid::s4u::Mailbox::by_name("mailbox2");
35 mailbox2->set_receiver(simgrid::s4u::Actor::self());
37 mailbox2->put_init(new std::string("More data"), 0)->detach();
39 xbt_assert(mailbox2->listen()); // used to break.
40 XBT_INFO("Task listen works on asynchronous mailboxes");
42 res = mailbox2->get<std::string>();
43 xbt_assert(*res == "More data");
46 XBT_INFO("Data successfully received from asynchronous mailbox");
49 int main(int argc, char* argv[])
51 simgrid::s4u::Engine e(&argc, argv);
52 e.load_platform(argv[1]);
54 simgrid::s4u::Actor::create("test", simgrid::s4u::Host::by_name("Tremblay"), server);