#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; event_loop loop; wait_scope wait{loop}; remote rmt; auto eov = rmt.parse_address(0u); SAW_EXPECT(eov.is_value(), "Didn't parse correctly"); auto& val = eov.get_value(); auto srv = data_server{val}; auto client = data_client{val}; data foo{421}; id sent_id = [&](){ auto eov = client.send(foo); SAW_EXPECT(eov.is_value(), "Failed send."); return eov.get_value(); }(); { 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."); } id alloc_id = [&](){ auto eov = client.allocate(data{}); SAW_EXPECT(eov.is_value(), "Failed send."); return eov.get_value(); }(); { auto eov = client.find(alloc_id); SAW_EXPECT(eov.is_value(), "Failed find."); auto& f_val = eov.get_value(); SAW_EXPECT(f_val, "Nullptr in find."); f_val->set(5u); } { auto conv = client.receive(alloc_id); auto eov = conv.take(); SAW_EXPECT(eov.is_value(), "Failed receive."); SAW_EXPECT(eov.get_value().get() == 5u, "Wrong received value."); } data> arr_meta{{128u}}; id> arr_alloc_id = [&](){ auto eov = client.allocate>(arr_meta); SAW_EXPECT(eov.is_value(), "Failed send."); return eov.get_value(); }(); { auto eov = client.find(arr_alloc_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->size() == arr_meta.at(0).get(), "Wrong initialized size."); } } }