#include #include namespace { using namespace aethera; using namespace aethera::render_2d; struct Spectrum_Fixture { Spectrum_Fixture() { Frequency_Axis::Builder frequency_builder; frequency_builder .set(&Abs_Axis::Prop::position, Point_F{10.0, 90.0}) .set(&Abs_Axis::Prop::pixel_length, 100.0) .set(&Numeric_Axis::Prop::coordinate_range, Axis_Range{0.0, 100.0}); Numeric_Axis::Builder power_builder; power_builder .set(&Abs_Axis::Prop::position, Point_F{10.0, 90.0}) .set(&Abs_Axis::Prop::pixel_length, -80.0) .set(&Abs_Axis::Prop::orientation, Axis_Orientation::vertical) .set(&Numeric_Axis::Prop::coordinate_range, Axis_Range{-100.0, 0.0}); frequency = frequency_builder.build(); power = power_builder.build(); aethera::detail::model_private(*frequency).advance(); aethera::detail::model_private(*power).advance(); } std::unique_ptr frequency; std::unique_ptr power; }; TEST(Spectrum, Imports_One_Frame_And_Publishes_Diagnostics) { Spectrum_Fixture fixture; Spectrum::Builder builder(*fixture.frequency, *fixture.power); builder .set(&Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0}) .set([](Spectrum::Frame& frame) { frame.samples = {-100.0, -50.0, 0.0}; }); auto spectrum = builder.build(); auto& private_data = aethera::detail::model_private(*spectrum); private_data.advance(); Blend2D_Cache cache; cache.ensure_size({120, 100}); aethera::render_2d::detail::Painter painter(cache, {120, 100}); private_data.paint(painter, {120, 100}); Spectrum::State state; spectrum->get([&](const Spectrum::State& value) { state = value; }); EXPECT_EQ(state.sample_count, 3U); EXPECT_GT(state.rendered_point_count, 0U); } TEST(Spectrum, Marker_Collection_Remains_One_Property_Source) { Spectrum_Fixture fixture; Spectrum::Builder builder(*fixture.frequency, *fixture.power); builder .set(&Spectrum::Prop::custom_markers, std::vector{10.0, 20.0}) .set(&Spectrum::Prop::selected_marker, 1); auto spectrum = builder.build(); std::vector markers; spectrum->get([&](const Spectrum::Prop& properties) { markers = properties.custom_markers; }); EXPECT_EQ(markers, (std::vector{10.0, 20.0})); } } // namespace