Files
Aethera/render_2D/tests/Spectrum_Test.cpp
T
2026-09-03 11:52:15 +08:00

60 lines
2.6 KiB
C++

#include <render_2D/module/plottable/Spectrum.hpp>
#include <gtest/gtest.h>
namespace {
using namespace aethera;
using namespace aethera::render_2d;
struct Spectrum_Fixture {
Spectrum_Fixture() {
Frequency_Axis::Builder frequency_builder;
frequency_builder
.set<Prop_Tag>(&Abs_Axis::Prop::position, Point_F{10.0, 90.0})
.set<Prop_Tag>(&Abs_Axis::Prop::pixel_length, 100.0)
.set<Prop_Tag>(&Numeric_Axis::Prop::coordinate_range, Axis_Range{0.0, 100.0});
Numeric_Axis::Builder power_builder;
power_builder
.set<Prop_Tag>(&Abs_Axis::Prop::position, Point_F{10.0, 90.0})
.set<Prop_Tag>(&Abs_Axis::Prop::pixel_length, -80.0)
.set<Prop_Tag>(&Abs_Axis::Prop::orientation, Axis_Orientation::vertical)
.set<Prop_Tag>(&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_Axis> frequency;
std::unique_ptr<Numeric_Axis> power;
};
TEST(Spectrum, Imports_One_Frame_And_Publishes_Diagnostics) {
Spectrum_Fixture fixture;
Spectrum::Builder builder(*fixture.frequency, *fixture.power);
builder
.set<Prop_Tag>(&Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0})
.set<Spectrum_Frame_Tag>([](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<State_Tag>([&](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<Prop_Tag>(&Spectrum::Prop::custom_markers, std::vector<Spectrum_Frequency>{10.0, 20.0})
.set<Prop_Tag>(&Spectrum::Prop::selected_marker, 1);
auto spectrum = builder.build();
std::vector<Spectrum_Frequency> markers;
spectrum->get<Prop_Tag>([&](const Spectrum::Prop& properties) { markers = properties.custom_markers; });
EXPECT_EQ(markers, (std::vector<Spectrum_Frequency>{10.0, 20.0}));
}
} // namespace