From 4a0b1477f9f87240eaec52fff4edc7fbb18f967c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 5 May 2023 16:55:04 +0200 Subject: [PATCH] new test cases --- .../test/Triangulation_3/CMakeLists.txt | 1 + .../test_segment_simplex_traverser_3.cpp | 81 ++++++++++++++++--- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/Triangulation_3/test/Triangulation_3/CMakeLists.txt b/Triangulation_3/test/Triangulation_3/CMakeLists.txt index 0cee5c47bfb..cbeb76d235b 100644 --- a/Triangulation_3/test/Triangulation_3/CMakeLists.txt +++ b/Triangulation_3/test/Triangulation_3/CMakeLists.txt @@ -26,6 +26,7 @@ create_single_source_cgal_program("test_simplex_3.cpp") create_single_source_cgal_program( "test_simplex_iterator_3.cpp" ) create_single_source_cgal_program( "test_segment_cell_traverser_3.cpp" ) create_single_source_cgal_program( "test_segment_simplex_traverser_3.cpp" ) +target_compile_features(test_segment_simplex_traverser_3 PRIVATE cxx_std_17) create_single_source_cgal_program("test_static_filters.cpp") create_single_source_cgal_program("test_triangulation_3.cpp") create_single_source_cgal_program("test_io_triangulation_3.cpp") diff --git a/Triangulation_3/test/Triangulation_3/test_segment_simplex_traverser_3.cpp b/Triangulation_3/test/Triangulation_3/test_segment_simplex_traverser_3.cpp index 3b43e1605ed..efd746544e6 100644 --- a/Triangulation_3/test/Triangulation_3/test_segment_simplex_traverser_3.cpp +++ b/Triangulation_3/test/Triangulation_3/test_segment_simplex_traverser_3.cpp @@ -106,6 +106,18 @@ auto debug_simplex(Simplex simplex) { return Debug_simplex{simplex}; } +static const std::vector bbox_points = +{ + { -10.1, -10, -10 }, + { -10.2, 10, -10 }, + { 10.3, 10, -10 }, + { 10.4, -10, -10 }, + { -10.5, -10, 10 }, + { -10.6, 10, 10 }, + { 10.7, 10, 10 }, + { 10.8, -10, 10 }, + }; + DT dt; std::string result_string; @@ -133,18 +145,6 @@ bool test_vfefv(bool with_bbox = false) { 6, -2, -2 }, }; - static const std::vector bbox_points = - { - { -10, -10, -10 }, - { -10, 10, -10 }, - { 10, 10, -10 }, - { 10, -10, -10 }, - { -10, -10, 10 }, - { -10, 10, 10 }, - { 10, 10, 10 }, - { 10, -10, 10 }, - }; - dt.clear(); insert(dt, points.begin(), points.end()); if(with_bbox) insert(dt, bbox_points.begin(), bbox_points.end()); @@ -170,6 +170,62 @@ bool test_vfefv(bool with_bbox = false) return ok; } +bool test_a_simple_tetrahedron() { + std::cerr << "## test_a_simple_tetrahedron()\n"; + bool ok = true; + auto test = [&](Point_3 a, Point_3 b, bool with_bbox, std::string expected_result) { + bool exception_thrown = false; + dt.clear(); + dt.insert({0, 0, 0}); + dt.insert({1, 0, 0}); + dt.insert({0, 1, 0}); + dt.insert({0, 0, 1}); + if(with_bbox) insert(dt, bbox_points.begin(), bbox_points.end()); + result_string.clear(); + std::cerr << "### Case " << expected_result; + if(with_bbox) std::cerr << " with bbox"; + std::cerr << '\n'; + try { + for(auto s: dt.segment_traverser_simplices(a, b)) { + visit_simplex(s); + } + } catch(const CGAL::Assertion_exception& e) { + CGAL::get_static_warning_handler()("Assertion", e.expression().c_str(), + e.filename().c_str(), + e.line_number(), + e.message().c_str()); + exception_thrown = true; + } + if(result_string != expected_result) { + std::cerr << "test_a_simple_tetrahedron failed\n"; + std::cerr << " result_string is " << result_string << " instead of " + << expected_result << '\n'; + ok = false; + } + if(exception_thrown) { + std::cerr << "test_a_simple_tetrahedron failed\n"; + std::cerr << " exception thrown\n"; + ok = false; + } + }; + + test({ 0, 0, 0}, { 1, 0, 0}, false, "010"); + test({ 0, 0, 0}, { 2, 0, 0}, false, "010I"); + test({-1, 0, 0}, { 2, 0, 0}, false, "I010I"); + test({ 0, 0, 0}, {.5, .5, 0}, false, "021"); + test({ 0, 0, 0}, { 1, 1, 0}, false, "021I"); + test({-1, -1, 0}, { 1, 1, 0}, false, "I021I"); + + test({ 0, 0, 0}, { 1, 0, 0}, true, "010"); + test({ 0, 0, 0}, { 2, 0, 0}, true, "0103"); + test({-1, 0, 0}, { 2, 0, 0}, true, "30103"); + test({ 0, 0, 0}, {.5, .5, 0}, true, "021"); + test({ 0, 0, 0}, { 1, 1, 0}, true, "0213"); + test({-1, -1, 0}, { 1, 1, 0}, true, "30213"); + + return ok; +} + bool test(const DT& dt, const std::pair& query, const std::array& expected_result); @@ -231,6 +287,7 @@ int main(int, char* []) std::cout << "Done (" << queries.size() << " queries)\n"; ok = test_vfefv() && ok; ok = test_vfefv(true) && ok; + ok = test_a_simple_tetrahedron() && ok; return ok ? EXIT_SUCCESS : EXIT_FAILURE; }