优化
This commit is contained in:
@@ -191,6 +191,10 @@ TEST(axis_time, sample_state_drives_range_lookup_and_label_without_snapshot) {
|
||||
auto axis = build_axis<Object>();
|
||||
EXPECT_EQ(axis->append_time({3'723'004}), 0);
|
||||
EXPECT_EQ(axis->time_point_count(), 0u);
|
||||
axis->exchange_stream<Time_Axis_Stream_Tag>();
|
||||
axis->accumulate_stream<Time_Axis_Stream_Tag>(100);
|
||||
axis->exchange_stream<Time_Axis_Stream_Tag>();
|
||||
axis->accumulate_stream<Time_Axis_Stream_Tag>(100);
|
||||
axis->advance();
|
||||
EXPECT_EQ(axis->time_point_count(), 1u);
|
||||
EXPECT_EQ(axis->coordinate_range(), (Axis_Range{-99.5, 0.5}));
|
||||
|
||||
@@ -4,8 +4,8 @@ namespace {
|
||||
using namespace aethera;
|
||||
using namespace aethera::render_2d;
|
||||
void paint_translucent_red(Frame_2D& frame) {
|
||||
auto& target = detail::Frame_2D_Access::render_target(&frame);
|
||||
detail::Painter painter(target, Size{1, 1});
|
||||
auto& target = aethera::render_2d::detail::Frame_2D_Access::render_target(&frame);
|
||||
aethera::render_2d::detail::Painter painter(target, Size{1, 1});
|
||||
painter.rect(Rect_F{0.0, 0.0, 1.0, 1.0},
|
||||
Pen{Color::transparent(), 0.0, Line_Style::none},
|
||||
Brush{Color{255, 0, 0, 128}, Brush_Style::solid});
|
||||
|
||||
@@ -78,9 +78,11 @@ TEST(plottable_migration, curve_plots_share_partitioned_rendering) {
|
||||
const std::array<Plot_Value, 4> second_block{-80.0, -50.0, -20.0, -5.0};
|
||||
const std::array<Plot_Value, 4> replacement_block{-70.0, -40.0, -15.0, -2.0};
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(first_block.begin(), first_block.end()));
|
||||
std::make_shared<const Sweep_Spectrum_Block>(Sweep_Spectrum_Block{
|
||||
0, {first_block.begin(), first_block.end()}}));
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(second_block.begin(), second_block.end()));
|
||||
std::make_shared<const Sweep_Spectrum_Block>(Sweep_Spectrum_Block{
|
||||
1, {second_block.begin(), second_block.end()}}));
|
||||
sweep->mark_dirty<Prepare_Data_Tag>();
|
||||
auto scene = build_scene<Scene>(trace.get(), sweep.get());
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
|
||||
@@ -89,13 +91,19 @@ TEST(plottable_migration, curve_plots_share_partitioned_rendering) {
|
||||
EXPECT_EQ(trace->access_rendering_stream<Frequency_Trace_Stream_Tag>(
|
||||
[](std::span<Frequency_Trace_Sample> samples) { return samples.size(); }), 3u);
|
||||
EXPECT_EQ(sweep->access_rendering_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const std::vector<Plot_Value>>> blocks) { return blocks.size(); }), 2u);
|
||||
[](std::span<std::shared_ptr<const Sweep_Spectrum_Block>> blocks) { return blocks.size(); }), 2u);
|
||||
sweep->submit_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(replacement_block.begin(), replacement_block.end()));
|
||||
std::make_shared<const Sweep_Spectrum_Block>(Sweep_Spectrum_Block{
|
||||
0, {replacement_block.begin(), replacement_block.end()}}));
|
||||
trace->submit_stream<Frequency_Trace_Stream_Tag>(
|
||||
Frequency_Trace_Sample{time->append_time({4'000}), 60.0});
|
||||
trace->mark_dirty<Prepare_Data_Tag>();
|
||||
sweep->mark_dirty<Prepare_Data_Tag>();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(trace->access_rendering_stream<Frequency_Trace_Stream_Tag>(
|
||||
[](std::span<Frequency_Trace_Sample> samples) { return samples.size(); }), 4u);
|
||||
EXPECT_EQ(sweep->access_query_stream<Sweep_Spectrum_Stream_Tag>(
|
||||
[](std::span<const std::shared_ptr<const std::vector<Plot_Value>>> blocks) { return blocks.size(); }), 2u);
|
||||
[](std::span<const std::shared_ptr<const Sweep_Spectrum_Block>> blocks) { return blocks.size(); }), 2u);
|
||||
}
|
||||
|
||||
TEST(plottable_migration, raster_plots_share_partitioned_color_blocks) {
|
||||
@@ -139,6 +147,17 @@ TEST(plottable_migration, raster_plots_share_partitioned_color_blocks) {
|
||||
[](std::span<std::shared_ptr<const std::vector<Plot_Value>>> spectra) { return spectra.size(); }), 1u);
|
||||
EXPECT_EQ(waterfall->access_rendering_stream<Waterfall_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const Waterfall_Row>> rows) { return rows.size(); }), 2u);
|
||||
glow->submit_stream<Afterglow_Stream_Tag>(
|
||||
std::make_shared<const std::vector<Plot_Value>>(row.begin(), row.end()));
|
||||
glow->mark_dirty<Prepare_Data_Tag>();
|
||||
waterfall->submit_stream<Waterfall_Stream_Tag>(std::make_shared<const Waterfall_Row>(
|
||||
Waterfall_Row{time->append_time({3'000}), {row.begin(), row.end()}}));
|
||||
waterfall->mark_dirty<Prepare_Data_Tag>();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(glow->access_rendering_stream<Afterglow_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const std::vector<Plot_Value>>> spectra) { return spectra.size(); }), 2u);
|
||||
EXPECT_EQ(waterfall->access_rendering_stream<Waterfall_Stream_Tag>(
|
||||
[](std::span<std::shared_ptr<const Waterfall_Row>> rows) { return rows.size(); }), 3u);
|
||||
}
|
||||
|
||||
TEST(plottable_migration, direct_overlay_and_constellation_build_and_render) {
|
||||
|
||||
@@ -36,7 +36,7 @@ std::unique_ptr<Frame_2D> render_frame(Scene* scene) {
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
TEST(spectrum_data, publishes_samples_and_interpolates_power) {
|
||||
TEST(spectrum_data, publishes_samples_through_tagged_frame_buffer) {
|
||||
using Frequency = Impl<Frequency_Axis>;
|
||||
using Power = Impl<Numeric_Axis>;
|
||||
using Object = Impl<Spectrum>;
|
||||
@@ -44,24 +44,16 @@ TEST(spectrum_data, publishes_samples_and_interpolates_power) {
|
||||
auto frequency = build_object<Frequency>();
|
||||
auto power = build_object<Power>();
|
||||
auto spectrum = build_object<Object>(frequency.get(), power.get());
|
||||
const auto missing = spectrum->power_at(25.0);
|
||||
ASSERT_FALSE(missing.has_value());
|
||||
EXPECT_EQ(missing.error(), Spectrum::Power_At_Result::no_samples);
|
||||
spectrum->set<&Spectrum::Prop::frequency_range>(Axis_Range{0.0, 100.0});
|
||||
const double samples[]{-100.0, -50.0, 0.0};
|
||||
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
|
||||
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->advance();
|
||||
EXPECT_EQ(spectrum->current_buffer<Spectrum_Frame_Tag>().samples.size(), 3u);
|
||||
const auto value = spectrum->power_at(25.0);
|
||||
ASSERT_TRUE(value.has_value());
|
||||
EXPECT_DOUBLE_EQ(*value, -75.0);
|
||||
const auto outside = spectrum->power_at(101.0);
|
||||
ASSERT_FALSE(outside.has_value());
|
||||
EXPECT_EQ(outside.error(), Spectrum::Power_At_Result::frequency_out_of_range);
|
||||
EXPECT_EQ(spectrum->current_buffer<Spectrum_Frame_Tag>().samples,
|
||||
(std::vector<Spectrum_Power>{-100.0, -50.0, 0.0}));
|
||||
}
|
||||
TEST(spectrum_markers, supports_selection_frequency_changes_and_known_results) {
|
||||
TEST(spectrum_markers, uses_tagged_properties_as_the_only_marker_interface) {
|
||||
using Frequency = Impl<Frequency_Axis>;
|
||||
using Power = Impl<Numeric_Axis>;
|
||||
using Object = Impl<Spectrum>;
|
||||
@@ -69,25 +61,31 @@ TEST(spectrum_markers, supports_selection_frequency_changes_and_known_results) {
|
||||
auto frequency = build_object<Frequency>();
|
||||
auto power = build_object<Power>();
|
||||
auto spectrum = build_object<Object>(frequency.get(), power.get());
|
||||
spectrum->add_custom_marker(10.0);
|
||||
spectrum->add_custom_line_marker(20.0);
|
||||
spectrum->set<&Spectrum::Prop::custom_markers>(
|
||||
std::vector<Spectrum_Frequency>{10.0, 20.0});
|
||||
spectrum->advance();
|
||||
EXPECT_EQ(spectrum->selectable_line_marker_count(), 2u);
|
||||
spectrum->set_selected_marker_index(1);
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().custom_markers.size(), 2u);
|
||||
spectrum->set<&Spectrum::Prop::selected_marker>(1);
|
||||
spectrum->advance();
|
||||
EXPECT_EQ(spectrum->selected_marker_index(), 1);
|
||||
EXPECT_EQ(spectrum->set_current_marker_frequency(25.0), Spectrum::Set_Current_Marker_Frequency_Result::updated);
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().selected_marker, 1);
|
||||
spectrum->update_prop<&Spectrum::Prop::custom_markers>(
|
||||
[](Prop_Access<Object::Prop> props) {
|
||||
props.get<Spectrum::Base_Tag>().custom_markers[1] = 25.0;
|
||||
});
|
||||
spectrum->advance();
|
||||
const auto frequency_value = spectrum->marker_frequency(1);
|
||||
ASSERT_TRUE(frequency_value.has_value());
|
||||
EXPECT_DOUBLE_EQ(*frequency_value, 25.0);
|
||||
const auto invalid = spectrum->marker_frequency(2);
|
||||
ASSERT_FALSE(invalid.has_value());
|
||||
EXPECT_EQ(invalid.error(), Spectrum::Marker_Frequency_Result::index_out_of_range);
|
||||
spectrum->remove_selected_marker();
|
||||
EXPECT_DOUBLE_EQ(
|
||||
spectrum->read_prop<Spectrum::Base_Tag>().custom_markers[1], 25.0);
|
||||
spectrum->update_prop<&Spectrum::Prop::custom_markers,
|
||||
&Spectrum::Prop::selected_marker>(
|
||||
[](Prop_Access<Object::Prop> props) {
|
||||
auto& values = props.get<Spectrum::Base_Tag>();
|
||||
values.custom_markers.erase(values.custom_markers.begin() +
|
||||
values.selected_marker);
|
||||
values.selected_marker = -1;
|
||||
});
|
||||
spectrum->advance();
|
||||
EXPECT_EQ(spectrum->selectable_line_marker_count(), 1u);
|
||||
EXPECT_EQ(spectrum->selected_marker_index(), -1);
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().custom_markers.size(), 1u);
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().selected_marker, -1);
|
||||
}
|
||||
TEST(render_scene_2d, composites_axes_and_spectrum_into_final_frame) {
|
||||
using Frequency = Impl<Frequency_Axis>;
|
||||
@@ -142,6 +140,10 @@ TEST(render_scene_2d, composites_axes_and_spectrum_into_final_frame) {
|
||||
EXPECT_FALSE(spectrum->dirty<Paint_Tag>());
|
||||
EXPECT_FALSE(frequency->dirty<Paint_Tag>());
|
||||
EXPECT_FALSE(power->dirty<Paint_Tag>());
|
||||
spectrum->set<&Renderable_2D::Prop::cache_enabled>(false);
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_TRUE(contains_color(output_frame->image()));
|
||||
spectrum->set<&Renderable_2D::Prop::cache_enabled>(true);
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_TRUE(contains_color(output_frame->image()));
|
||||
frequency->set<&Numeric_Axis::Prop::precision>(3);
|
||||
|
||||
Reference in New Issue
Block a user