#include #include #include #include #include namespace { using namespace aethera; using namespace aethera::render_2d; template std::unique_ptr build_object(Args&&... args) { typename Object::template Builder builder(std::forward(args)...); auto result = builder.build(); if (!result) std::terminate(); return std::move(result).value(); } template std::unique_ptr build_scene(Renderables*... renderables) { typename Scene::template Builder builder; (builder.add_renderable(not_null{renderables}), ...); auto result = builder.build(); if (!result) std::terminate(); return std::move(result).value(); } template void configure_axis(Axis* axis, Axis_Orientation orientation, Point_F position, Axis_Pixel_Length length, Size canvas) { axis->template set<&Abs_Axis::Prop::orientation>(orientation); axis->template set<&Abs_Axis::Prop::position>(position); axis->template set<&Abs_Axis::Prop::pixel_length>(length); } template void render_once(Scene* scene) { static std::uint64_t sequence{1}; Frame_2D frame{Frame_Identity{sequence++, 0}}; EXPECT_TRUE(scene->render( &frame, [](not_null) {}).has_value()); } } TEST(plottable_migration, curve_plots_share_partitioned_rendering) { using Scene = Render_Scene_2D; using Frequency = Frequency_Axis; using Numeric = Numeric_Axis; using Time = Time_Axis; using Trace = Frequency_Trace; using Sweep = Sweep_Spectrum; initialize_runtime({.workers = 2}); const Size canvas{160, 120}; auto frequency = build_object(); auto power = build_object(); auto time = build_object