60 lines
2.6 KiB
C++
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
|