#include #include "../c++/remote_loopback.hpp" namespace { namespace sch { using namespace saw::schema; using TestInterface = Interface< Member, "foo"> >; using GroupedSchemas = saw::tmpl_group< UInt64, String, Array, Float64 >; } SAW_TEST("Remote Loopback Data"){ using namespace saw; remote rmt; auto eov = rmt.parse_address(); SAW_EXPECT(eov.is_value(), "Didn't parse correctly"); auto& val = eov.get_value(); interface iface{ [](data& foo){ return foo.template cast_to(); } }; auto srv = data_server{}; auto client = data_client{srv}; data foo{421}; id sent_id = [&](){ auto eov = client.send(foo); SAW_EXPECT(eov.is_value(), "Failed send."); return eov.get_value(); }(); event_loop loop; wait_scope wait{loop}; { auto conv = client.receive(sent_id); auto eov = conv.take(); SAW_EXPECT(eov.is_value(), "Failed receive."); SAW_EXPECT(eov.get_value() == foo, "Wrong received value."); } { auto eov = client.find(sent_id); SAW_EXPECT(eov.is_value(), "Failed find."); auto& f_val = eov.get_value(); SAW_EXPECT(f_val, "Nullptr in find."); SAW_EXPECT(*f_val == foo, "Wrong received value."); } { auto eov = client.erase(sent_id); SAW_EXPECT(eov.is_value(), "Failed erase."); } { auto conv = client.receive(sent_id); auto eov = conv.take(); SAW_EXPECT(!eov.is_value(), "Failed receive. Value should already be erased."); } } }