3#define DOCTEST_CONFIG_IMPLEMENT
5#include "doctest_utils.h"
9TEST_CASE(
"Visualizer::disableMessages") {
10 Visualizer visualizer(1000, 800, 16,
false,
true);
12 DOCTEST_CHECK_NOTHROW(visualizer.disableMessages());
15 visualizer.setColorbarRange(20, 10);
20TEST_CASE(
"Visualizer::enableMessages") {
21 Visualizer visualizer(1000, 800, 16,
true,
true);
23 DOCTEST_CHECK_NOTHROW(visualizer.enableMessages());
26 visualizer.setColorbarRange(20, 10);
31TEST_CASE(
"Visualizer::setCameraPosition") {
32 Visualizer visualizer(1000, 800, 16,
true,
true);
35 visualizer.setCameraPosition(initial_position, initial_lookat);
38 std::vector<helios::vec3> positions = visualizer.getCameraPosition();
39 DOCTEST_CHECK(positions.size() == 2);
40 DOCTEST_CHECK(positions.at(1) == initial_position);
41 DOCTEST_CHECK(positions.at(0) == initial_lookat);
44TEST_CASE(
"Visualizer::setLightingModel") {
45 Visualizer visualizer(1000, 800, 16,
true,
true);
52TEST_CASE(
"Visualizer::setBackgroundColor and Visualizer::getBackgroundColor") {
53 Visualizer visualizer(1000, 800, 16,
true,
true);
55 visualizer.setBackgroundColor(bgcolor);
56 DOCTEST_CHECK(visualizer.getBackgroundColor() == bgcolor);
59TEST_CASE(
"Visualizer::setLightIntensityFactor") {
60 Visualizer visualizer(1000, 800, 16,
true,
true);
61 DOCTEST_CHECK_NOTHROW(visualizer.setLightIntensityFactor(0.75f));
64TEST_CASE(
"Visualizer::enableColorbar and Visualizer::disableColorbar") {
65 Visualizer visualizer(1000, 800, 16,
true,
true);
66 DOCTEST_CHECK_NOTHROW(visualizer.enableColorbar());
67 DOCTEST_CHECK_NOTHROW(visualizer.disableColorbar());
70TEST_CASE(
"Visualizer::setColorbarPosition") {
71 Visualizer visualizer(1000, 800, 16,
true,
true);
72 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarPosition(
make_vec3(0.5f, 0.5f, 0.f)));
74 DOCTEST_CHECK_THROWS_AS(visualizer.setColorbarPosition(
make_vec3(-0.1f, 0.f, 0.f)), std::runtime_error);
77TEST_CASE(
"Visualizer::setColorbarSize") {
78 Visualizer visualizer(1000, 800, 16,
true,
true);
79 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarSize(
make_vec2(0.1f, 0.05f)));
81 DOCTEST_CHECK_THROWS_AS(visualizer.setColorbarSize(
make_vec2(1.5f, 0.f)), std::runtime_error);
84TEST_CASE(
"Visualizer::setColorbarRange") {
85 Visualizer visualizer(1000, 800, 16,
true,
true);
86 visualizer.enableMessages();
87 visualizer.setColorbarRange(0.f, 1.f);
89 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarRange(20.f, 10.f));
93TEST_CASE(
"Visualizer::setColorbarTicks") {
94 Visualizer visualizer(1000, 800, 16,
true,
true);
95 visualizer.setColorbarRange(0.f, 1.f);
96 std::vector<float> ticks{0.f, 0.5f, 1.f};
97 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarTicks(ticks));
99 DOCTEST_CHECK_THROWS_AS(visualizer.setColorbarTicks({}), std::runtime_error);
100 DOCTEST_CHECK_THROWS_AS(visualizer.setColorbarTicks({0.f, 0.5f, 0.4f}), std::runtime_error);
103TEST_CASE(
"Visualizer colorbar text attributes") {
104 Visualizer visualizer(1000, 800, 16,
true,
true);
105 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarTitle(
"MyBar"));
106 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarFontColor(RGB::yellow));
107 DOCTEST_CHECK_NOTHROW(visualizer.setColorbarFontSize(14));
109 DOCTEST_CHECK_THROWS_AS(visualizer.setColorbarFontSize(0), std::runtime_error);
112TEST_CASE(
"Visualizer::setColormap") {
113 Visualizer visualizer(1000, 800, 16,
true,
true);
117 DOCTEST_CHECK_THROWS_AS(visualizer.setColormap(std::vector<RGBcolor>{RGB::red}, std::vector<float>{0.f, 1.f}), std::runtime_error);
120TEST_CASE(
"Visualizer::PNG texture integration via primitives") {
121 Visualizer visualizer(1000, 800, 16,
true,
true);
122 const char *png_filename =
"plugins/visualizer/textures/AlmondLeaf.png";
125 DOCTEST_CHECK(std::filesystem::exists(png_filename));
128 std::vector<helios::vec3> verts = {
make_vec3(0, 0, 0),
make_vec3(1, 0, 0),
make_vec3(1, 1, 0),
make_vec3(0, 1, 0)};
131 DOCTEST_CHECK(UUID1 != 0);
135 DOCTEST_CHECK_NOTHROW(UUID2 = visualizer.addTriangle(
make_vec3(0, 0, 0),
make_vec3(1, 0, 0),
make_vec3(0, 1, 0), png_filename,
make_vec2(0, 0),
make_vec2(1, 0),
make_vec2(0, 1),
Visualizer::COORDINATES_CARTESIAN));
136 DOCTEST_CHECK(UUID2 != 0);
137 DOCTEST_CHECK(UUID2 != UUID1);
140TEST_CASE(
"Visualizer::JPEG texture integration via primitives") {
141 Visualizer visualizer(1000, 800, 16,
true,
true);
142 const char *jpeg_filename =
"plugins/visualizer/textures/SkyDome_clouds.jpg";
145 DOCTEST_CHECK(std::filesystem::exists(jpeg_filename));
149 std::vector<size_t> UUIDs;
150 DOCTEST_CHECK_NOTHROW(UUIDs = visualizer.addSkyDomeByCenter(5.0f,
make_vec3(0, 0, 0), N, jpeg_filename));
151 DOCTEST_CHECK(UUIDs.size() == (N - 1) * (2 * (N - 1) + 1));
154 std::vector<helios::vec3> verts = {
make_vec3(1, 1, 1),
make_vec3(3, 1, 1),
make_vec3(3, 3, 1),
make_vec3(1, 3, 1)};
157 DOCTEST_CHECK(rect_UUID != 0);
160TEST_CASE(
"Visualizer::Visualizer") {
161 DOCTEST_CHECK_NOTHROW(
Visualizer v1(800, 600,
true));
162 DOCTEST_CHECK_NOTHROW(
Visualizer v2(1024, 768, 4,
false,
true));
163 DOCTEST_CHECK_NOTHROW(
Visualizer v3(1280, 720, 8,
false,
true));
166TEST_CASE(
"Visualizer texture copy") {
167 DOCTEST_CHECK(std::filesystem::exists(
"plugins/visualizer/textures/AlmondLeaf.png"));
168 DOCTEST_CHECK(std::filesystem::exists(
"plugins/visualizer/textures/Helios_watermark.png"));
169 DOCTEST_CHECK(std::filesystem::exists(
"plugins/visualizer/textures/SkyDome_clouds.jpg"));
172TEST_CASE(
"Visualizer::addRectangleByCenter") {
173 Visualizer visualizer(1000, 800, 16,
true,
true);
176 DOCTEST_CHECK(UUID != 0);
179TEST_CASE(
"Visualizer::addRectangleByCenter extreme") {
180 Visualizer visualizer(1000, 800, 16,
true,
true);
183 DOCTEST_CHECK(UUID != 0);
186TEST_CASE(
"Visualizer::addRectangleByVertices variations") {
187 Visualizer visualizer(1000, 800, 16,
true,
true);
188 std::vector<helios::vec3> verts = {
make_vec3(0, 0, 0),
make_vec3(1, 0, 0),
make_vec3(1, 1, 0),
make_vec3(0, 1, 0)};
191 DOCTEST_CHECK(UUID1 != 0);
194 DOCTEST_CHECK(UUID2 != 0);
197TEST_CASE(
"Visualizer::addTriangle") {
198 Visualizer visualizer(1000, 800, 16,
true,
true);
200 DOCTEST_CHECK_NOTHROW(UUID = visualizer.addTriangle(
make_vec3(0, 0, 0),
make_vec3(1, 0, 0),
make_vec3(0, 1, 0), RGB::blue,
Visualizer::COORDINATES_CARTESIAN));
201 DOCTEST_CHECK(UUID != 0);
204TEST_CASE(
"Visualizer::addTriangle textured") {
205 Visualizer visualizer(1000, 800, 16,
true,
true);
207 DOCTEST_CHECK_NOTHROW(UUID = visualizer.addTriangle(
make_vec3(0, 0, 0),
make_vec3(1, 0, 0),
make_vec3(0, 1, 0),
"plugins/visualizer/textures/AlmondLeaf.png",
make_vec2(0, 0),
make_vec2(1, 0),
make_vec2(0, 1),
Visualizer::COORDINATES_CARTESIAN));
208 DOCTEST_CHECK(UUID != 0);
211TEST_CASE(
"Visualizer::addVoxelByCenter") {
212 Visualizer visualizer(1000, 800, 16,
true,
true);
213 std::vector<size_t> UUIDs;
215 DOCTEST_CHECK(UUIDs.size() == 6);
218TEST_CASE(
"Visualizer::addSphereByCenter") {
219 Visualizer visualizer(1000, 800, 16,
true,
true);
221 std::vector<size_t> UUIDs;
223 DOCTEST_CHECK(UUIDs.size() == 2 * N * (N - 1));
226TEST_CASE(
"Visualizer::addSkyDomeByCenter") {
227 Visualizer visualizer(1000, 800, 16,
true,
true);
229 std::vector<size_t> UUIDs;
230 DOCTEST_CHECK_NOTHROW(UUIDs = visualizer.addSkyDomeByCenter(5.0f,
make_vec3(0, 0, 0), N,
"plugins/visualizer/textures/SkyDome_clouds.jpg"));
231 DOCTEST_CHECK(UUIDs.size() == (N - 1) * (2 * (N - 1) + 1));
234TEST_CASE(
"Visualizer::addCoordinateAxes") {
235 Visualizer visualizer(1000, 800, 16,
true,
true);
236 DOCTEST_CHECK_NOTHROW(visualizer.addCoordinateAxes(
make_vec3(0, 0, 0),
make_vec3(1, 1, 1),
"XYZ"));
239TEST_CASE(
"Visualizer::addLine") {
240 Visualizer visualizer(1000, 800, 16,
true,
true);
244TEST_CASE(
"Visualizer::addLine with line width") {
245 Visualizer visualizer(1000, 800, 16,
true,
true);
250 DOCTEST_CHECK(UUID1 != 0);
254 DOCTEST_CHECK_NOTHROW(UUID2 = visualizer.addLine(
make_vec3(2, 0, 0),
make_vec3(3, 1, 1),
make_RGBAcolor(1.0f, 0.0f, 0.0f, 0.5f), 5.0f,
Visualizer::COORDINATES_CARTESIAN));
255 DOCTEST_CHECK(UUID2 != 0);
256 DOCTEST_CHECK(UUID2 != UUID1);
261 DOCTEST_CHECK(UUID3 != 0);
266 DOCTEST_CHECK(UUID4 != 0);
269TEST_CASE(
"Visualizer::validateTextureFile") {
272 DOCTEST_CHECK(!
validateTextureFile(
"plugins/visualizer/textures/SkyDome_clouds.jpg",
true));
275TEST_CASE(
"Visualizer::point culling configuration simple") {
279 DOCTEST_CHECK_NOTHROW(visualizer.setPointCullingEnabled(
true));
280 DOCTEST_CHECK_NOTHROW(visualizer.setPointCullingEnabled(
false));
283TEST_CASE(
"Visualizer::addPoint basic functionality") {
288 DOCTEST_CHECK(point_uuid != 0);
291TEST_CASE(
"Visualizer::addPoint with different sizes") {
305 DOCTEST_CHECK(point1 != 0);
306 DOCTEST_CHECK(point2 != 0);
307 DOCTEST_CHECK(point3 != 0);
308 DOCTEST_CHECK(point4 != 0);
309 DOCTEST_CHECK(point1 != point2);
310 DOCTEST_CHECK(point2 != point3);
311 DOCTEST_CHECK(point3 != point4);
314TEST_CASE(
"Visualizer::addPoint RGBA with sizes") {
321 DOCTEST_CHECK(point1 != 0);
322 DOCTEST_CHECK(point2 != 0);
323 DOCTEST_CHECK(point1 != point2);
326TEST_CASE(
"Visualizer::point culling metrics functionality") {
330 size_t total, rendered;
332 DOCTEST_CHECK_NOTHROW(visualizer.getPointRenderingMetrics(total, rendered, time));
335 for (
int i = 0; i < 5; ++i) {
337 DOCTEST_CHECK(uuid != 0);
341 DOCTEST_CHECK_NOTHROW(visualizer.getPointRenderingMetrics(total, rendered, time));
346TEST_CASE(
"Visualizer::point size edge cases") {
352 DOCTEST_CHECK(point1 != 0);
358 DOCTEST_CHECK(point2 != 0);
364 DOCTEST_CHECK(point3 != 0);
368 DOCTEST_CHECK(point1 != point2);
369 DOCTEST_CHECK(point2 != point3);
370 DOCTEST_CHECK(point1 != point3);
374 return helios::runDoctestWithValidation(argc, argv);