#include "render_3D/Datoviz_Visuals.h" #include #include namespace renderive::render_3d { namespace { template void exercise(Item item) { static_assert(std::derived_from); auto visual = typename Visual::Builder{}.build(std::vector{item}); ASSERT_NE(visual, nullptr); EXPECT_EQ(visual->item_count(), 1U); const auto revision = visual->data_revision(); visual->edit_items([](auto& items) { items.push_back(items.front()); }); EXPECT_EQ(visual->item_count(), 2U); EXPECT_GT(visual->data_revision(), revision); const auto observation = visual->observation(); EXPECT_EQ(observation.item_count, 2U); EXPECT_EQ(observation.data_revision, visual->data_revision()); } TEST(DatovizVisualFamilies, EveryPublicFamilyUsesRenderableStorage) { exercise(Splat{}); exercise(Pixel{}); exercise(Marker{}); exercise(Sphere{}); exercise(Segment{.end = {1, 0, 0}}); exercise(Vector_Glyph{}); exercise(Primitive_Vertex{}); exercise(Mesh_Vertex{}); exercise(Path_Vertex{}); exercise(Image{}); exercise(Label{}); exercise(Glyph{}); exercise(Text_Label{.text = "Renderive"}); exercise(Voxel{}); } TEST(DatovizVisualFamilies, StateValidationAndBuilderPropertiesAreShared) { auto volume = Volume_Visual::Builder{} .set<&Volume_State::field_width>(4U) .set<&Volume_State::field_height>(4U) .set<&Volume_State::field_depth>(4U) .build(std::vector(64)); ASSERT_NE(volume, nullptr); EXPECT_EQ(volume->get<&Volume_State::field_depth>(), 4U); EXPECT_THROW((Volume_Visual::Builder{} .set<&Volume_State::field_width>(4U) .build()), std::invalid_argument); } } // namespace } // namespace renderive::render_3d