#include "render_3D/Datoviz_Visuals.h" #include #include namespace renderive::render_3d { namespace { template void exercise(Item item) { auto visual = typename Visual::Builder{std::vector{item}}.build(); ASSERT_TRUE(visual); EXPECT_EQ(visual->item_count(), 1U); ASSERT_EQ(visual->edit_items( [](auto& items) { items.push_back(items.front()); }), Visual_Data_Error::none); EXPECT_EQ(visual->item_count(), 2U); } TEST(DatovizVisualFamilies, EveryPublicFamilyUsesBuilderOwnedStorage) { 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, BuilderValidationUsesStateProperties) { auto volume = Volume_Visual::Builder(std::vector(64)) .set<&Volume_State::field_width>(4U) .set<&Volume_State::field_height>(4U) .set<&Volume_State::field_depth>(4U) .build(); ASSERT_TRUE(volume); 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