#include #include #include #include namespace { struct Test_Renderable_2D : aethera::Def { struct Private : Prev_Private {}; }; TEST(Model_Adaptation, Final_Private_Adapts_To_Renderable_Facade) { auto renderable = Test_Renderable_2D::Builder{}.build(); auto proxy = aethera::model_proxy_view(*renderable); aethera::render_2d::Blend2D_Cache target; ASSERT_TRUE(proxy); target.ensure_size({32, 24}); proxy->render(target); proxy->advance(); EXPECT_TRUE(proxy->taskflow()); } TEST(Model_Adaptation, Scene_Owns_The_Only_Renderable_Dag) { aethera::Dag_Relation::Builder dag_builder; dag_builder.add({1}, aethera::make_model_proxy()); auto dag = dag_builder.build(); ASSERT_TRUE(dag.has_value()); aethera::render_2d::Render_Scene_2D::Builder scene_builder; scene_builder .relation([dag = std::move(*dag)](auto& relation) mutable { relation = std::move(dag); }); auto scene = scene_builder.build(); EXPECT_TRUE(scene->model_initialized()); auto& relation = aethera::detail::model_private(*scene).relation(); static_assert(std::same_as::Node, aethera::render_2d::scene::Renderable>); std::size_t node_count{}; relation.for_each_topological([&](auto, auto&) { ++node_count; }); EXPECT_EQ(node_count, 1U); } } // namespace