Fix move ResizeableObject move constructor
It wasn't handling non-owned allocators correctly, which messed up using
the move constructor on aos StaticBuilders.
Change-Id: Ie751fd0a0c76db723b375aaec310de66b08a55b1
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index f4f2fcc..d2d3aa9 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -133,6 +133,33 @@
EXPECT_TRUE(happened);
}
+// Tests that a static sender's Builder object can be moved safely.
+TEST_P(AbstractEventLoopTest, StaticBuilderMoveConstructor) {
+ auto loop1 = MakePrimary();
+
+ aos::Sender<TestMessageStatic> sender =
+ loop1->MakeSender<TestMessageStatic>("/test");
+ aos::Fetcher<TestMessage> fetcher = loop1->MakeFetcher<TestMessage>("/test");
+ std::optional<aos::Sender<TestMessageStatic>::StaticBuilder> moved_to_builder;
+ {
+ aos::Sender<TestMessageStatic>::StaticBuilder moved_from_builder =
+ sender.MakeStaticBuilder();
+ moved_to_builder.emplace(std::move(moved_from_builder));
+ }
+
+ loop1->OnRun([this, &moved_to_builder]() {
+ moved_to_builder.value()->set_value(200);
+ CHECK(moved_to_builder.value().builder()->Verify());
+ moved_to_builder.value().CheckOk(moved_to_builder.value().Send());
+ this->Exit();
+ });
+
+ ASSERT_FALSE(fetcher.Fetch());
+ Run();
+ ASSERT_TRUE(fetcher.Fetch());
+ EXPECT_EQ(200, fetcher->value());
+}
+
// Tests that watcher can receive messages from a sender, sent via SendDetached.
TEST_P(AbstractEventLoopTest, BasicSendDetached) {
auto loop1 = Make();