实时分块控制
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
#include <render_2D/plottable/Constellation_Diagram.hpp>
|
||||
#include <render_2D/plottable/Spectrum.hpp>
|
||||
#include <render_2D/plottable/Waterfall.hpp>
|
||||
#include <render_2D/plottable/common/Raster_Plot.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
using namespace aethera;
|
||||
using namespace aethera::render_2d;
|
||||
|
||||
template <typename Object, typename... Arguments>
|
||||
std::unique_ptr<Object> build_object(Arguments&&... arguments) {
|
||||
typename Object::Builder builder(std::forward<Arguments>(arguments)...);
|
||||
auto result = builder.build();
|
||||
if (!result) std::terminate();
|
||||
return std::move(result).value();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(partition_configuration,
|
||||
builder_and_runtime_share_the_authoritative_partition_properties) {
|
||||
using Frequency = Impl<Frequency_Axis>;
|
||||
using Power = Impl<Numeric_Axis>;
|
||||
using Time = Impl<Time_Axis>;
|
||||
using Spectrum_Object = Impl<Spectrum>;
|
||||
using Constellation_Object = Impl<Constellation_Diagram>;
|
||||
using Waterfall_Object = Impl<Waterfall>;
|
||||
|
||||
auto frequency = build_object<Frequency>();
|
||||
auto power = build_object<Power>();
|
||||
auto q_axis = build_object<Power>();
|
||||
auto time = build_object<Time>();
|
||||
auto spectrum = build_object<Spectrum_Object>(frequency.get(), power.get(),
|
||||
6u);
|
||||
auto constellation = build_object<Constellation_Object>(
|
||||
power.get(), q_axis.get(), 7u);
|
||||
auto waterfall = build_object<Waterfall_Object>(
|
||||
frequency.get(), time.get(), Plot_Partition_Grid{2, 3});
|
||||
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().partition_count, 6u);
|
||||
EXPECT_EQ(constellation->read_prop<Constellation_Diagram::Base_Tag>()
|
||||
.partition_count,
|
||||
7u);
|
||||
EXPECT_EQ(waterfall->read_prop<Waterfall::Base_Tag>().partition_grid,
|
||||
(Plot_Partition_Grid{2, 3}));
|
||||
|
||||
spectrum->set<&Spectrum::Prop::partition_count>(3u);
|
||||
constellation->set<&Constellation_Diagram::Prop::partition_count>(2u);
|
||||
waterfall->set<&Waterfall::Prop::partition_grid>(
|
||||
Plot_Partition_Grid{4, 5});
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().partition_count, 3u);
|
||||
EXPECT_EQ(constellation->read_prop<Constellation_Diagram::Base_Tag>()
|
||||
.partition_count,
|
||||
2u);
|
||||
EXPECT_EQ(waterfall->read_prop<Waterfall::Base_Tag>().partition_grid,
|
||||
(Plot_Partition_Grid{4, 5}));
|
||||
|
||||
spectrum->set<&Spectrum::Prop::partition_count>(0u);
|
||||
waterfall->set<&Waterfall::Prop::partition_grid>(
|
||||
Plot_Partition_Grid{0, 2});
|
||||
EXPECT_EQ(spectrum->read_prop<Spectrum::Base_Tag>().partition_count, 0u);
|
||||
EXPECT_EQ(waterfall->read_prop<Waterfall::Base_Tag>().partition_grid,
|
||||
(Plot_Partition_Grid{0, 2}));
|
||||
}
|
||||
|
||||
TEST(partition_configuration,
|
||||
raster_grid_covers_each_matrix_cell_exactly_once) {
|
||||
const aethera::render_2d::detail::Raster_Layout layout{
|
||||
7, 5, Rect_F{0.0, 0.0, 140.0, 100.0}, true, true, false};
|
||||
const Plot_Partition_Grid grid{3, 2};
|
||||
std::vector<unsigned> visits(
|
||||
static_cast<std::size_t>(layout.width) * layout.height);
|
||||
|
||||
for (Plot_Partition_Count index = 0;
|
||||
index < aethera::render_2d::detail::raster_partition_count(grid);
|
||||
++index) {
|
||||
const aethera::render_2d::detail::Raster_Partition partition =
|
||||
aethera::render_2d::detail::raster_partition(
|
||||
layout, index, grid);
|
||||
EXPECT_FALSE(partition.empty());
|
||||
EXPECT_FALSE(aethera::render_2d::detail::raster_paint_region(
|
||||
layout, index, grid).empty());
|
||||
for (int y = partition.first_y; y < partition.last_y; ++y)
|
||||
for (int x = partition.first_x; x < partition.last_x; ++x)
|
||||
++visits[static_cast<std::size_t>(y) * layout.width + x];
|
||||
}
|
||||
for (const unsigned count : visits) EXPECT_EQ(count, 1u);
|
||||
}
|
||||
Reference in New Issue
Block a user