Commit Graph
82 Commits
Author SHA1 Message Date
Sebastien Loriot 244d9dee08 STL_Extension: Add bisect_failures debugging utility (#9118)
## Summary

This PR adds a new debugging utility `bisect_failures` to the
STL_Extension package. This function helps identify minimal failing test
cases from complex input data by using a bisection-like approach.

**Small feature: [bisect failures debugging
utility](https://cgalwiki.geometryfactory.com/CGAL/Members/wiki/Features/Small_Features/bisect_failures_debugging_utility)**

## Features

- **Multiple failure type support**: Handles CGAL exceptions,
std::exceptions, and exit codes
- **Automatic granularity adjustment**: Starts with ratio=0.5,
automatically halves when no fault is found
- **Debug output**: Saves intermediate states (`current`, `bad`,
`error`, `final_bad`)
- **Template-based design**: Works with any copyable/assignable data
type

## Testing

Added comprehensive test suite (`test_bisect_failures.cpp`) with 14
tests:
-  Edge cases (empty data, no failures)
-  Single element failures (CGAL exception, std::exception, exit code)
-  Pair combinations (all 2-element permutations)
-  Triple combinations (all 3 failure types together)

All tests pass in both Debug and Release configurations.

## Use Case

This utility is particularly useful for:
- Debugging complex geometric algorithms with large input datasets
- Finding minimal reproducible test cases from failing inputs
- Isolating problematic elements in mesh processing, triangulation, etc.

## Example Usage

```cpp
auto get_size = [](const Mesh& m) { return m.number_of_faces(); };
auto simplify = [](Mesh& m, std::size_t start, std::size_t end) -> bool {
  // Remove faces from start to end
  for(std::size_t i = start; i < end && i < m.number_of_faces(); ++i) {
    m.remove_face(start);
  }
  return true;
};
auto run = [](const Mesh& m) -> int { return algorithm(m); };
auto save = [](const Mesh& m, const std::string& prefix) {
  std::ofstream out(prefix + ".off");
  out << m;
};

int result = bisect_failures(mesh, get_size, simplify, run, save);
```

## Files Changed

- `STL_Extension/include/CGAL/bisect_failures.h` (new) - Main utility
header
- `STL_Extension/test/STL_Extension/test_bisect_failures.cpp` (new) -
Test suite
- `STL_Extension/test/STL_Extension/CMakeLists.txt` (modified) - Added
test

## Checklist

- [x] Code compiles without errors (Debug and Release)
- [x] All tests pass
- [x] Comprehensive documentation with Doxygen comments
- [x] Example usage in documentation
- [x] Follows CGAL coding style conventions
- [x] Deal with false positive in the testsuite

## Release Management

* Affected package(s): `STL_Extension`
* Feature/Small Feature (if any): [bisect failures debugging
utility](https://cgalwiki.geometryfactory.com/CGAL/Members/wiki/Features/Small_Features/bisect_failures_debugging_utility)
* Link to compiled documentation (obligatory for small feature)
[doc](https://cgal.github.io/9118/v2/STL_Extension/group__PkgSTLExtensionUtilities.html#gad56d708faac9063d3de057394a6d8c52)
* License and copyright ownership: no change
2026-02-12 14:59:15 +01:00
Sven Oesau 3e01c496dd Merge branch 'main' into SD_RG_face_normal_map 2025-12-07 11:30:52 +01:00
Laurent Rineau c89c212a54 bisect_failures: fix documentation 2025-10-31 22:24:41 +01:00
Laurent Rineau e7ab5002a3 add the test non_manifold_face_graph.off 2025-10-17 16:31:14 +02:00
Sven Oesau c7826b20ab Merge branch 'master' into SD_RG_face_normal_map 2025-08-04 16:37:27 +02:00
Sven Oesau dc2ed8c923 added examples to show a difference between Line_segment_region and Plane_face_region versus their linear least squares counterparts 2025-08-04 15:45:36 +02:00
Sébastien Loriot 2504f0ccac add file removed 2025-06-30 09:11:50 +02:00
Jane Tournois 0ab9d3eebf Merge remote-tracking branch 'cgal/master' into Triangulation_3-CDT_3-lrineau
# Conflicts:
#	Installation/CHANGES.md
2025-06-10 11:18:38 +02:00
Jane Tournois 4083e353aa add an example with non-triangulated self-intersecting input 2025-05-12 13:00:32 +02:00
Jane Tournois ca1a5982b6 add an example with self-intersections and autorefinement 2025-05-12 12:12:32 +02:00
Andreas Fabri 851d03dadb merge master 2025-05-07 09:13:11 +01:00
Laurent Rineau 52fff7401a add missing data file 2025-04-25 09:00:01 +02:00
Andreas Fabri 7925d2a08b merge master 2025-04-08 11:49:02 +01:00
Sébastien Loriot b32558b87e Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface 2024-12-16 11:47:34 +01:00
Andreas Fabri 23af1048ba Add data for 3D example 2024-11-29 12:35:17 +00:00
Andreas Fabri aaae4ad370 Add data for 2D example 2024-11-29 11:25:15 +00:00
Laurent Rineau 02632017a5 Merge remote-tracking branch 'cgal/master' into Triangulation_3-CDT_3-lrineau 2024-11-12 12:33:37 +01:00
Sven Oesau a06002ab2b Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface 2024-10-14 14:42:46 +02:00
Sébastien Loriot f91765503c demo improvement and various clean-ups 2024-10-01 11:57:04 +02:00
Laurent Rineau 37f3bcfaab Merge remote-tracking branch 'cgal/master' into Triangulation_3-CDT_3-lrineau 2024-09-09 10:57:33 +02:00
Sébastien Loriot a8d7bd1850 move point cloud to the right directory 2024-08-13 13:57:44 +02:00
Laurent Rineau ed4fb14f74 merge master (WIP: need #8273) 2024-07-01 16:38:56 +02:00
Mael Rouxel-Labbé 67aba3fefe Merge remote-tracking branch 'cgal/master' into gsoc2022-isosurface 2024-06-20 10:18:49 +02:00
Sebastien Loriot d06a57a292 Mesh_3 edge_distance criterion : an upper bound for the distances of the feature edge to the input feature (#7532)
## Summary of Changes

Fixes issue #5110.
Adds a edge_distance criteria to the mesh generation process.
This criteria is an upper bound for the distance from the edge to the 1D
feature.

## Release Management

* Affected package(s): Mesh_3
* Issue(s) solved (if any): fix #5110
* Link to small feature page :
[Mesh_3_edge_distance_criteria](https://cgal.geometryfactory.com/CGAL/Members/wiki/Features/Small_Features/Mesh_3_edge_distance_criteria)
* Link to compiled documentation
[*here*](https://cgal.github.io/7532/v1/Manual/index.html):
*
[Mesh_edge_criteria_3](https://cgal.github.io/7532/v1/Mesh_3/classCGAL_1_1Mesh__edge__criteria__3.html)
  * [Mesh_criteria_3](https://cgal.github.io/7532/v1/Mesh_3)
2024-05-27 10:58:15 +02:00
Sebastien Loriot afe7f90a73 Mesh_3::Add handling of *.nii files in one example (#7823)
## Summary of Changes

While the Polyhedron demo can read `*.nii` files there is no example in
`examples/Mesh_3/`.
This PR adds the functionality to the example that uses vtk to read
DICOM data.

This is triggered by [this
question](https://stackoverflow.com/questions/77331075/is-there-an-easy-way-to-convert-from-nifti-nii-image-format-to-inr)
on stackoverflow.

- [ ] Support of `*.nrrd` format
- [ ] example for segmented images
- [ ] Add example data for the file formats.

## Release Management

* Affected package(s): Mesh_3
* License and copyright ownership: unchanged
2024-05-26 17:45:48 +02:00
Andreas Fabri 3833b66474 Add example for mutipolygon 2024-05-15 10:59:51 +01:00
Laurent Rineau b828719c7c Merge remote-tracking branch 'cgal/master' into Triangulation_3-CDT_3-lrineau 2024-04-26 14:40:04 +02:00
Laurent Rineau 0fa27bc857 Merge remote-tracking branch 'cgal/master' into Triangulation_3-CDT_3-lrineau 2024-04-24 16:51:27 +02:00
Efi Fogel 89bfe4ba91 Merge remote-tracking branch 'cgal/master' into gsoc2023-aos_sphere_demo-denizdiktas 2024-04-15 19:11:21 +03:00
ange-clement 3cb583ade7 Added nii image "squircle.nii" +
Updated example to work with a default dataset.
2024-04-12 12:16:25 +02:00
ange-clement 70fd9113e7 Merge branch 'master' of https://github.com/CGAL/cgal into Mesh-3-edge-distance-criterium-aclement 2024-03-28 11:36:39 +01:00
Sébastien Loriot 5254404517 Merge remote-tracking branch 'cgal/master' into HEAD 2024-03-27 22:25:41 +01:00
ange-clement a1e9a08905 added vtk image 2024-03-27 20:06:13 +01:00
Laurent Rineau ed9f712dcd specify that the data set is public domain 2024-03-27 18:37:04 +01:00
Laurent Rineau bffa8f213e Merge pull request #8072 from janetournois/Mesh_3-use_one_step_loop-jtournois
Mesh_3 - fix mesher using the `one_step()` loop

# Conflicts:
#	Mesh_3/include/CGAL/Mesh_3/Triangulation_helpers.h
2024-03-26 10:21:00 +01:00
Jane Tournois 5b004ffbe6 add a test for one_step() loop with features on tiny data 2024-03-14 17:27:47 +01:00
Sébastien Loriot e1df935e88 rename data directory 2024-03-01 14:37:05 +01:00
Efi Fogel e545c67ab0 Added description 2024-03-01 14:49:40 +02:00
Efi Fogel 13b22abd4f Merge branch 'master' into gsoc2023-aos_sphere_demo-denizdiktas 2024-01-08 16:27:52 +02:00
Laurent Rineau e2a745f79f Merge pull request #7892 from sloriot/CGAL-fix_dh_angle_sign
fix dihedral angle computation
2023-12-11 13:56:02 +01:00
Laurent Rineau 4be3a1e589 Merge pull request #7892 from sloriot/CGAL-fix_dh_angle_sign
fix dihedral angle computation
2023-12-11 13:50:38 +01:00
Laurent Rineau df4eed9302 add tests for the dihedral angle 2023-11-29 15:27:57 +01:00
Jane Tournois fbae36fcbe add missing input file 2023-11-24 08:56:13 +01:00
Jane Tournois 850c99e0f2 make data match exactly at vertices
with no degenerate border edges
2023-11-17 16:18:04 +01:00
Jane Tournois b6d770f30b add data for Mesh_3 test manifold_and_min_size 2023-11-03 09:05:17 +01:00
Efi Fogel eb089b7531 cleaned up 2023-08-30 16:43:46 +03:00
Efi Fogel a7e3885200 Added json database file and refered to it 2023-08-29 15:15:27 +03:00
Laurent Rineau b2975192ef Partial revert "remove the height point on the box"
This reverts commit f39c37b66260470dc7e9c1912433e138c5d423a3's
modifications on `Data/data/meshes/cheese.off`.
2023-07-21 16:36:59 +02:00
Laurent Rineau f799769361 remove the height point on the box
They make insert more Steiner vertices.
2023-07-21 15:36:09 +02:00
Laurent Rineau bb6eb6f711 fix the "cheesy" bug
Now the test passes with `cheese.off`, in 205.41 sec
in `RelWithDebInfo` mode
2023-07-04 22:59:09 +02:00