Skip to content

fix(Manifold): robustness and performance of manifold, adjacency and negative elements inspections - #202

Open
BotellaA wants to merge 20 commits into
nextfrom
fix/mesh-criteria-review
Open

BotellaA wants to merge 20 commits into
nextfrom
fix/mesh-criteria-review

Conversation

@BotellaA

Copy link
Copy Markdown
Member

Summary

Robustness and performance fixes for the manifold, adjacency and negative elements inspections, from a review of OpenGeode-Inspector. There is one commit per fix, and each fix is covered by a test.

Robustness

  • Edges shared by more than 255 polygons: the per-edge counter was a local_index_t, so an edge shared by 257 polygons wrapped around and was seen as a manifold border edge.
  • Out-of-range adjacencies: surface and solid adjacency checks segfaulted in release on a stale adjacency index. Such adjacencies are now reported.
  • Model edges with unlinked vertices: these all became the model edge (NO_ID, NO_ID) and were reported as non-manifold.
  • several_cmvs_on_one_vertex(NO_ID): it read out of bounds in release, crashing the BRep manifold inspection when an internal Line has a single edge whose vertices have no unique vertex.
  • SolidMeshEdgeManifold::mesh_edges_are_manifold: it threw on broken adjacencies, where it should return false.
  • Surface vertices with broken adjacencies: when the walk around such a vertex threw, the vertex was silently counted as manifold. It is now reported as not checkable.
  • Block border facets with unlinked vertices: they were silently skipped, while the surface equivalent is reported.

Performance (identical results on all benchmark models)

  • Vertex manifold, surfaces and solids: no longer use the lazily-cached polygons_around_vertex / polyhedra_around_vertex of OpenGeode. The same walk is done locally, without allocation and in parallel. This also removes a data race: those caches were filled while the topology inspection read them concurrently.
  • Solid edge manifold:
    • the edge map is built per query instead of in the constructor, with inline storage;
    • the separate checked-edges set is gone;
    • edges are checked in parallel.
  • Solid facet manifold: uses a reserved flat_hash_map instead of a linked_hash_map.
  • BRep model edges manifold: unique vertices are fetched once per surface vertex, and the edge map is a flat_hash_map with inline storage. Issue order is preserved.
  • The model manifold inspections run in parallel.
  • Adjacency:
    • surface border edges are checked directly against the line meshes;
    • block border facets are looked up in a set of all surface polygons, which also removes polygons_around_vertex cache use;
    • the cheap adjacency back-link is tested before comparing facet cycles;
    • solid facets and components are checked in parallel.
  • Negative elements: triangles are no longer converted to a Polygon (a heap allocation each).
inspection model before after
inspect_brep_manifold cva/brep_from_topo 3.8 s 1.07 s
inspect_brep_manifold corbi_tet_mesh 0.52 s 0.16 s
inspect_brep_manifold fimiston 0.60 s 0.32 s
inspect_brep_meshes_adjacencies cva/brep_from_topo 0.88 s 0.15 s
inspect_brep_meshes_adjacencies corbi_tet_mesh 0.29 s 0.034 s
inspect_brep_meshes_adjacencies fimiston 0.098 s 0.031 s

The large models come from the Geode-Explicit, Geode-Background and Geode-Conversion test data.

Not changed

  • Non-tetrahedron negative volumes: a flat polyhedron cannot be reported as negative from rounding noise, because polyhedron_volume already returns 0 for it.
  • Surface edge manifold with a flat_hash_map: measured with no gain, so it was not kept.
  • Per-element parallelism in negative elements: the check is cheap.
  • Changed starting point of the vertex manifold walk: it now starts from the first element containing the vertex, instead of the mesh's stored one, which is protected API. With consistent adjacencies this gives the same result.

Related

🤖 Generated with Claude Code

BotellaA and others added 19 commits October 14, 2026 18:54
The number of polygons around an edge was stored in a local_index_t: an
edge shared by 257 polygons wrapped to 1 and was seen as a border edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hing

The adjacent polygon/polyhedron index was used without bounds check (OpenGeode
only asserts it in debug): a stale adjacency read out of bounds and crashed
in release. It is now reported as a wrong adjacency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Surface edges whose vertices are not linked to unique vertices all became
the model edge (NO_ID, NO_ID), shared by every such surface, and were reported
as non manifold. They are skipped: unlinked vertices are reported by the
topology inspection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…onger crash

several_cmvs_on_one_vertex called component_mesh_vertices(NO_ID), only
guarded by a debug assertion: unlinked vertices of a single edge internal
Line (or single polygon internal Surface) read out of bounds in release.
Unlinked vertices are skipped, they are reported by the topology inspection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ad of throwing

mesh_edges_are_manifold let the polyhedra_around_edge exception escape on
broken adjacencies, while non_manifold_edges already reports them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cache

Each vertex called SolidMesh::polyhedra_around_vertex, which allocates a hash
set and a stack, fills the mesh lazy cache (racy when other inspections run
concurrently) and throws on broken adjacencies. The same propagation through
facet adjacencies is now done locally, without allocation for usual vertices,
in parallel over vertices. It starts from the first polyhedron containing
the vertex instead of the mesh stored one.

Solid vertex manifold: cva/brep_from_topo blocks 0.37s -> 0.15s,
corbi_tet_mesh 0.11s -> 0.03s (identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- the edge to polyhedra map stored a heap vector per edge, did two hash
  lookups per edge occurrence and was built in the constructor, paid by
  every SolidMeshInspector even if edges were never inspected (and stale if
  the mesh changed); unique edges are now listed once per query with inline
  storage
- the checked_edges hash set is replaced by the unique edges order
- polyhedra around each edge are propagated in parallel

Solid edge manifold: cva/brep_from_topo blocks 2.31s -> 0.57s,
corbi_tet_mesh 0.32s -> 0.08s (identical results, same issues order).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sh map

The facet counts used an absl::linked_hash_map (a list node per facet) and
up to two lookups per facet occurrence. A reserved flat_hash_map with a
single try_emplace is used, non manifold facets are sorted back in order of
first appearance.

Solid facet manifold: cva/brep_from_topo blocks 1.41s -> 0.96s; whole BRep
manifold inspection 3.8s -> 1.87s with the previous commits (identical
results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When polygons_around_vertex threw (broken adjacencies, or over 1000 polygons
around the vertex), the vertex was silently skipped and counted as manifold.
It is now reported as a vertex which could not be checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…x cache

Each vertex called SurfaceMesh::polygons_around_vertex, which fills the mesh
lazy cache: this raced with the topology inspection reading the same cache
(is_vertex_on_border) in BRep/Section inspections. The same walk around the
vertex is now done locally, bounded by the number of polygons containing the
vertex, checking adjacency indices, and in parallel over vertices.

Surface vertex manifold: cva/brep_from_topo surfaces 0.040s -> 0.013s
(identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ying

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The vertices, edges, facets and model edges/facets manifold inspections of
a BRep (vertices and edges for a Section) ran one after the other. They fill
different results and no longer write to the mesh caches, so they now run
concurrently.

inspect_brep_manifold: cva/brep_from_topo 1.87s -> 1.08s, corbi_tet_mesh
0.29s -> 0.16s, fimiston 0.68s -> 0.48s (identical results). Overall with
the previous commits: cva/brep_from_topo 3.8s -> 1.08s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each surface edge made two model.unique_vertex() calls (uuid hash lookup)
and the edges map was an absl::linked_hash_map with a std::vector per edge.
Surface unique vertices are fetched once per vertex, the map is a
flat_hash_map with inline storage and non manifold edges are sorted back in
order of first appearance.

inspect_brep_manifold: fimiston 0.48s -> 0.32s, model_D 0.023s -> 0.011s
(identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For every surface border edge, detail::line_component_mesh_edges built hash
maps of component mesh vertex pairs and of line edges only to test whether
the result was empty, after two unique_vertex() hash lookups; exceptions
were used for unlinked vertices with a warning logged per edge. The line
edge is now looked up directly from the component mesh vertices, unique
vertices are fetched once per surface vertex, unlinked vertices are checked
explicitly (same issue message) and surfaces are inspected in parallel.

inspect_brep_meshes_adjacencies: fimiston 0.098s -> 0.034s, model_D
0.009s -> 0.003s (identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A block border facet whose vertices were not linked to unique vertices was
silently skipped, while the same case is reported for surface border edges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For every block border facet, polygon_unique_vertices made one unique_vertex
hash lookup per vertex and detail::surface_component_mesh_polygons built
hash maps and called SurfaceMesh::polygons_around_vertex, which fills the
mesh lazy cache (racy with the other inspections running concurrently). The
sorted unique vertices of every surface polygon are now gathered once, in
parallel, and each border facet is a single set lookup; blocks are inspected
in parallel.

inspect_brep_meshes_adjacencies: corbi_tet_mesh 0.29s -> 0.07s,
mss 0.077s -> 0.034s (identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For each interior facet, an OrientedVertexCycle was built for every facet of
the adjacent polyhedron before testing whether that facet points back. The
back-link and the number of vertices are now tested first, so usually a
single cycle comparison is made.

inspect_brep_meshes_adjacencies: cva/brep_from_topo 0.83s -> 0.58s,
corbi_tet_mesh 0.07s -> 0.05s (identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
polyhedron_facets_with_wrong_adjacency checked every polyhedron serially.
Polyhedra are now checked in parallel and issues added in the same order.

inspect_brep_meshes_adjacencies: cva/brep_from_topo 0.58s -> 0.15s, mss
0.028s -> 0.008s (identical results).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mesh.polygon() builds a std::vector of points per polygon; triangles now
use the exact triangle_area_sign on their three points directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@BotellaA
BotellaA requested a review from panquez October 14, 2026 17:33
@github-actions

Copy link
Copy Markdown

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-tidy (v21.1.8) reports: 350 concern(s)
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:82:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       82 |         Impl( const BRep& brep )
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:118:9: warning: [modernize-use-nodiscard]

    function 'mesh_unique_vertices' should be marked [[nodiscard]]

      118 |         std::vector< index_t > mesh_unique_vertices(
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:131:9: warning: [modernize-use-nodiscard]

    function 'surfaces_polygons_unique_vertices' should be marked [[nodiscard]]

      131 |         absl::flat_hash_set< SortedUniqueVertices >
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:132:13: warning: [readability-function-cognitive-complexity]

    function 'surfaces_polygons_unique_vertices' has cognitive complexity of 15 (threshold 10)

      132 |             surfaces_polygons_unique_vertices() const
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:136:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      136 |             for( const auto& surface : model().surfaces() )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:138:51: note: nesting level increased to 2
      138 |                 tasks.emplace_back( async::spawn( [this, &surface] {
          |                                                   ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:144:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      144 |                     for( const auto polygon_id : Range{ mesh.nb_polygons() } )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:147:25: note: +4, including nesting penalty of 3, nesting level increased to 4
      147 |                         for( auto& vertex : vertices )
          |                         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:151:25: note: +4, including nesting penalty of 3, nesting level increased to 4
      151 |                         if( absl::c_contains( vertices, NO_ID ) )
          |                         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:162:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      162 |             for( auto& task : async::when_all( tasks ).get() )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:164:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      164 |                 for( auto& polygon : task.get() )
          |                 ^
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:172:9: warning: [modernize-use-nodiscard]

    function 'block_wrong_adjacencies' should be marked [[nodiscard]]

      172 |         InspectionIssues< PolyhedronFacet > block_wrong_adjacencies(
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:172:45: warning: [readability-function-cognitive-complexity]

    function 'block_wrong_adjacencies' has cognitive complexity of 13 (threshold 10)

      172 |         InspectionIssues< PolyhedronFacet > block_wrong_adjacencies(
          |                                             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:187:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      187 |             for( const auto polyhedron_id : Range{ mesh.nb_polyhedra() } )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:189:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      189 |                 for( const auto facet_id :
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:194:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      194 |                     if( !mesh.is_polyhedron_facet_on_border(
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:200:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      200 |                     for( const auto vertex :
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:208:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      208 |                     if( absl::c_contains( facet_unique_vertices, NO_ID )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/adjacency/brep_meshes_adjacency.cpp:209:25: note: +1
      209 |                         || !surface_polygons.contains( facet_unique_vertices ) )
          |                         ^
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:42:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       42 |         Impl( const SolidMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:44:9: warning: [modernize-use-nodiscard]

    function 'mesh_has_wrong_adjacencies' should be marked [[nodiscard]]

       44 |         bool mesh_has_wrong_adjacencies() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:64:9: warning: [modernize-use-nodiscard]

    function 'polyhedron_facets_with_wrong_adjacency' should be marked [[nodiscard]]

       64 |         InspectionIssues< PolyhedronFacet >
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:88:9: warning: [modernize-use-nodiscard]

    function 'facets_with_wrong_adjacency' should be marked [[nodiscard]]

       88 |         std::vector< absl::InlinedVector< local_index_t, 1 > >
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:113:9: warning: [modernize-use-nodiscard]

    function 'mesh_polyhedron_facet_has_right_adjacency' should be marked [[nodiscard]]

      113 |         bool mesh_polyhedron_facet_has_right_adjacency(
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/solid_adjacency.cpp:118:44: warning: [bugprone-unchecked-optional-access]

    unchecked access to optional value

      118 |             const auto polyhedron_adj_id = adjacent_polyhedron.value();
          |                                            ^~~~~~~~~~~~~~~~~~~
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:37:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       37 |         Impl( const SurfaceMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:39:9: warning: [modernize-use-nodiscard]

    function 'mesh_has_wrong_adjacencies' should be marked [[nodiscard]]

       39 |         bool mesh_has_wrong_adjacencies() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:58:9: warning: [modernize-use-nodiscard]

    function 'polygon_edges_with_wrong_adjacency' should be marked [[nodiscard]]

       58 |         InspectionIssues< PolygonEdge >
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:84:9: warning: [modernize-use-nodiscard]

    function 'mesh_polygon_edge_has_right_adjacency' should be marked [[nodiscard]]

       84 |         bool mesh_polygon_edge_has_right_adjacency(
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:89:41: warning: [bugprone-unchecked-optional-access]

    unchecked access to optional value

       89 |             const auto polygon_adj_id = adjacent_polygon.value();
          |                                         ^~~~~~~~~~~~~~~~
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:94:24: warning: [readability-identifier-length]

    variable name 'v0' is too short, expected at least 3 characters

       94 |             const auto v0 = mesh_.polygon_edge_vertex( polygon_edge, 0 );
          |                        ^
  • src/geode/inspector/inspection/criterion/adjacency/surface_adjacency.cpp:95:24: warning: [readability-identifier-length]

    variable name 'v1' is too short, expected at least 3 characters

       95 |             const auto v1 = mesh_.polygon_edge_vertex( polygon_edge, 1 );
          |                        ^
  • src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:47:10: warning: [readability-function-cognitive-complexity]

    function 'unique_vertices_are_on_a_line_edge' has cognitive complexity of 16 (threshold 10)

       47 |     bool unique_vertices_are_on_a_line_edge( const Model& model,
          |          ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:51:9: note: +1, including nesting penalty of 0, nesting level increased to 1
       51 |         if( unique_vertex0 == unique_vertex1 )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:56:9: note: +1, including nesting penalty of 0, nesting level increased to 1
       56 |         for( const auto& cmv0 :
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:59:13: note: +2, including nesting penalty of 1, nesting level increased to 2
       59 |             if( cmv0.component_id.type
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:64:13: note: +2, including nesting penalty of 1, nesting level increased to 2
       64 |             for( const auto& cmv1 : cmvs1 )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:66:17: note: +3, including nesting penalty of 2, nesting level increased to 3
       66 |                 if( cmv1.component_id.id != cmv0.component_id.id )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:71:17: note: +3, including nesting penalty of 2, nesting level increased to 3
       71 |                 for( const auto& edge_vertex :
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:74:21: note: +4, including nesting penalty of 3, nesting level increased to 4
       74 |                     if( mesh.edge_vertex( edge_vertex.opposite() )
          |                     ^
  • src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:86:51: warning: [readability-function-cognitive-complexity]

    function 'surface_wrong_adjacencies' has cognitive complexity of 11 (threshold 10)

       86 |     geode::InspectionIssues< geode::PolygonEdge > surface_wrong_adjacencies(
          |                                                   ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:96:9: note: +1, including nesting penalty of 0, nesting level increased to 1
       96 |         for( const auto v : geode::Indices{ unique_vertices } )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:101:9: note: +1, including nesting penalty of 0, nesting level increased to 1
      101 |         for( const auto polygon_id : geode::Range{ mesh.nb_polygons() } )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:103:13: note: +2, including nesting penalty of 1, nesting level increased to 2
      103 |             for( const auto edge_id :
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:107:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      107 |                 if( !mesh.is_edge_on_border( polygon_edge ) )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:116:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      116 |                 if( unique_vertex0 >= model.nb_unique_vertices()
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:118:21: note: +1
      118 |                     || !unique_vertices_are_on_a_line_edge(
          |                     ^
  • src/geode/inspector/inspection/criterion/internal/component_meshes_adjacency.cpp:133:1: warning: [modernize-concat-nested-namespaces]

    nested namespaces can be concatenated

      133 | namespace geode
          | ^~~~~~~~~~~~~~~
      134 | {
          | ~
      135 |     namespace internal
          |     ~~~~~~~~~~~~~~~~~~
          |     namespace geode::internal
  • src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:161:14: warning: [readability-function-cognitive-complexity]

    function 'add_model_non_manifold_edges' has cognitive complexity of 32 (threshold 10)

      161 |         void add_model_non_manifold_edges(
          |              ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
      165 |             struct EdgeSurfaces
          |                    ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:165:20: note: nesting level increased to 1
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:172:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      172 |             for( const auto& surface : model().active_surfaces() )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:176:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      176 |                 for( const auto v : Indices{ unique_vertices } )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:181:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      181 |                 for( const auto polygon_id : Range{ mesh.nb_polygons() } )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:183:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      183 |                     for( const auto edge_id :
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:188:25: note: +4, including nesting penalty of 3, nesting level increased to 4
      188 |                         if( !adj || adj.value() < polygon_id )
          |                         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:188:34: note: +1
      188 |                         if( !adj || adj.value() < polygon_id )
          |                                  ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:198:25: note: +4, including nesting penalty of 3, nesting level increased to 4
      198 |                         if( vertex0 == NO_ID || vertex1 == NO_ID )
          |                         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:198:46: note: +1
      198 |                         if( vertex0 == NO_ID || vertex1 == NO_ID )
          |                                              ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:211:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      211 |             for( auto& edge : edges_map )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:213:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      213 |                 if( edge.second.surfaces.size() > 1 )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:218:34: note: nesting level increased to 1
      218 |             absl::c_sort( edges, []( const auto& lhs, const auto& rhs ) {
          |                                  ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:222:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      222 |             for( auto& edge : edges )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:228:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      228 |                 for( const auto& surface_uuid : edge.second.surfaces )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:243:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      243 |             for( const auto& line : model().active_lines() )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:246:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      246 |                 if( mesh.nb_edges() != 1
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:247:21: note: +1
      247 |                     || model().nb_embedding_surfaces( line ) == 0 )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:252:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      252 |                 for( const auto edge_vertex : LRange{ 2 } )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:258:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      258 |                 if( several_cmvs_on_one_vertex( edge_unique_vertices ) )
          |                 ^
  • src/geode/inspector/inspection/criterion/manifold/brep_meshes_manifold.cpp:202:31: warning: [readability-identifier-length]

    variable name 'it' is too short, expected at least 3 characters

      202 |                         auto [it, inserted] = edges_map.try_emplace(
          |                               ^
  • src/geode/inspector/inspection/criterion/manifold/section_meshes_manifold.cpp:70:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       70 |         Impl( const Section& section )
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/manifold/solid_edge_manifold.cpp:81:29: warning: [readability-identifier-length]

    variable name 'it' is too short, expected at least 3 characters

       81 |                 const auto [it, inserted] = edge_ids.try_emplace(
          |                             ^
  • src/geode/inspector/inspection/criterion/manifold/solid_edge_manifold.cpp:136:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

      136 |         Impl( const SolidMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/manifold/solid_edge_manifold.cpp:138:9: warning: [modernize-use-nodiscard]

    function 'mesh_edges_are_manifold' should be marked [[nodiscard]]

      138 |         bool mesh_edges_are_manifold() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/manifold/solid_edge_manifold.cpp:147:9: warning: [modernize-use-nodiscard]

    function 'non_manifold_edges' should be marked [[nodiscard]]

      147 |         InspectionIssues< std::array< index_t, 2 > > non_manifold_edges() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/manifold/solid_facet_manifold.cpp:58:23: warning: [readability-identifier-length]

    variable name 'it' is too short, expected at least 3 characters

       58 |                 auto [it, inserted] = facet_counts.try_emplace(
          |                       ^
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:82:10: warning: [readability-function-cognitive-complexity]

    function 'vertex_is_manifold' has cognitive complexity of 18 (threshold 10)

       82 |     bool vertex_is_manifold( const geode::SolidMesh< dimension >& mesh,
          |          ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:86:9: note: +1, including nesting penalty of 0, nesting level increased to 1
       86 |         if( polyhedron_vertices.empty() )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:95:9: note: +1, including nesting penalty of 0, nesting level increased to 1
       95 |         while( !to_visit.empty() )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:100:13: note: +2, including nesting penalty of 1, nesting level increased to 2
      100 |             if( reached.size() > polyhedron_vertices.size() )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:104:13: note: +2, including nesting penalty of 1, nesting level increased to 2
      104 |             for( const auto& polyhedron_facet :
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:109:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      109 |                 if( !adjacent )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:114:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      114 |                 if( adjacent_id >= mesh.nb_polyhedra() )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:118:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      118 |                 if( absl::c_contains( visited, adjacent_id ) )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:123:17: note: +3, including nesting penalty of 2, nesting level increased to 3
      123 |                 if( const auto vertex_in_adjacent =
          |                 ^
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:91:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    32 is a magic number; consider replacing it with a named constant

       91 |         absl::InlinedVector< geode::index_t, 32 > visited;
          |                                              ^
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:92:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    32 is a magic number; consider replacing it with a named constant

       92 |         absl::InlinedVector< geode::PolyhedronVertex, 32 > to_visit;
          |                                                       ^
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:159:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

      159 |         Impl( const SolidMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:161:9: warning: [modernize-use-nodiscard]

    function 'mesh_vertices_are_manifold' should be marked [[nodiscard]]

      161 |         bool mesh_vertices_are_manifold() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/manifold/solid_vertex_manifold.cpp:166:9: warning: [modernize-use-nodiscard]

    function 'non_manifold_vertices' should be marked [[nodiscard]]

      166 |         InspectionIssues< index_t > non_manifold_vertices() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:124:19: warning: [readability-function-cognitive-complexity]

    function 'vertex_status' has cognitive complexity of 24 (threshold 10)

      124 |     VERTEX_STATUS vertex_status( const geode::SurfaceMesh< dimension >& mesh,
          |                   ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:127:9: note: +1, including nesting penalty of 0, nesting level increased to 1
      127 |         if( polygon_vertices.empty() )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:138:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      138 |             while( true )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:142:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      142 |                 if( !next )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:146:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      146 |                 if( !next.value() )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:150:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      150 |                 if( next.value() == first )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:156:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      156 |                 if( reached.size() > polygon_vertices.size() )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:162:13: note: +1, including nesting penalty of 0, nesting level increased to 1
      162 |             if( !closed )
          |             ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:166:17: note: +2, including nesting penalty of 1, nesting level increased to 2
      166 |                 while( true )
          |                 ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:170:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      170 |                     if( !next )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:174:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      174 |                     if( !next.value() )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:179:21: note: +3, including nesting penalty of 2, nesting level increased to 3
      179 |                     if( reached.size() > polygon_vertices.size() )
          |                     ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:187:9: note: +1, including nesting penalty of 0, nesting level increased to 1
      187 |         catch( const geode::OpenGeodeException& )
          |         ^
    /__w/OpenGeode-Inspector/OpenGeode-Inspector/src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:192:20: note: +1, including nesting penalty of 0, nesting level increased to 1
      192 |                    ? VERTEX_STATUS::manifold
          |                    ^
  • src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:220:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

      220 |         Impl( const SurfaceMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:222:9: warning: [modernize-use-nodiscard]

    function 'mesh_vertices_are_manifold' should be marked [[nodiscard]]

      222 |         bool mesh_vertices_are_manifold() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/manifold/surface_vertex_manifold.cpp:230:9: warning: [modernize-use-nodiscard]

    function 'non_manifold_vertices' should be marked [[nodiscard]]

      230 |         InspectionIssues< index_t > non_manifold_vertices() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/negative_elements/surface_negative_elements.cpp:43:9: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       43 |         Impl( const SurfaceMesh< dimension >& mesh ) : mesh_( mesh ) {}
          |         ^
          |         explicit 
  • src/geode/inspector/inspection/criterion/negative_elements/surface_negative_elements.cpp:45:9: warning: [modernize-use-nodiscard]

    function 'mesh_has_negative_elements' should be marked [[nodiscard]]

       45 |         bool mesh_has_negative_elements() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/negative_elements/surface_negative_elements.cpp:60:9: warning: [modernize-use-nodiscard]

    function 'negative_polygons' should be marked [[nodiscard]]

       60 |         InspectionIssues< index_t > negative_polygons() const
          |         ^
          |         [[nodiscard]] 
  • src/geode/inspector/inspection/criterion/negative_elements/surface_negative_elements.cpp:80:9: warning: [modernize-use-nodiscard]

    function 'polygon_is_negative' should be marked [[nodiscard]]

       80 |         bool polygon_is_negative( index_t polygon_id ) const
          |         ^
          |         [[nodiscard]] 
  • tests/inspection/test-brep-meshes-criteria.cpp:49:70: warning: [readability-identifier-length]

    parameter name 'z' is too short, expected at least 3 characters

       49 |         const geode::BRep& brep, geode::BRepBuilder& builder, double z )
          |                                                                      ^
  • tests/inspection/test-brep-meshes-criteria.cpp:64:6: warning: [misc-use-internal-linkage]

    function 'check_model_edges_without_unique_vertices' can be made static or moved into an anonymous namespace to enforce internal linkage

       64 | void check_model_edges_without_unique_vertices()
          |      ^
          | static 
  • tests/inspection/test-brep-meshes-criteria.cpp:79:6: warning: [misc-use-internal-linkage]

    function 'check_single_edge_line_without_unique_vertices' can be made static or moved into an anonymous namespace to enforce internal linkage

       79 | void check_single_edge_line_without_unique_vertices()
          |      ^
          | static 
  • tests/inspection/test-brep-meshes-criteria.cpp:100:6: warning: [misc-use-internal-linkage]

    function 'check_block_facets_without_unique_vertices' can be made static or moved into an anonymous namespace to enforce internal linkage

      100 | void check_block_facets_without_unique_vertices()
          |      ^
          | static 
  • tests/inspection/test-solid-adjacency.cpp:36:6: warning: [misc-use-internal-linkage]

    function 'check_adjacency' can be made static or moved into an anonymous namespace to enforce internal linkage

       36 | void check_adjacency()
          |      ^
          | static 
  • tests/inspection/test-solid-adjacency.cpp:40:31: warning: [cppcoreguidelines-avoid-magic-numbers]

    5 is a magic number; consider replacing it with a named constant

       40 |     builder->create_vertices( 5 );
          |                               ^
  • tests/inspection/test-solid-adjacency.cpp:41:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       41 |     builder->set_point( 0, geode::Point3D{ { 0., 0., 2. } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:42:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       42 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:42:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       42 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:43:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       43 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:43:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       43 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:43:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       43 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:44:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       44 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:44:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1.5 is a magic number; consider replacing it with a named constant

       44 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:44:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       44 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                       ^
  • tests/inspection/test-solid-adjacency.cpp:45:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    3.5 is a magic number; consider replacing it with a named constant

       45 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:45:51: warning: [cppcoreguidelines-avoid-magic-numbers]

    2.5 is a magic number; consider replacing it with a named constant

       45 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                   ^
  • tests/inspection/test-solid-adjacency.cpp:45:57: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       45 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                         ^
  • tests/inspection/test-solid-adjacency.cpp:60:6: warning: [misc-use-internal-linkage]

    function 'check_non_adjacency_no_bijection' can be made static or moved into an anonymous namespace to enforce internal linkage

       60 | void check_non_adjacency_no_bijection()
          |      ^
          | static 
  • tests/inspection/test-solid-adjacency.cpp:64:31: warning: [cppcoreguidelines-avoid-magic-numbers]

    6 is a magic number; consider replacing it with a named constant

       64 |     builder->create_vertices( 6 );
          |                               ^
  • tests/inspection/test-solid-adjacency.cpp:65:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       65 |     builder->set_point( 0, geode::Point3D{ { 0., 0., 2. } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:66:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       66 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:66:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       66 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:67:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       67 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:67:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       67 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:67:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       67 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:68:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       68 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:68:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1.5 is a magic number; consider replacing it with a named constant

       68 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:68:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       68 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                       ^
  • tests/inspection/test-solid-adjacency.cpp:69:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    3.5 is a magic number; consider replacing it with a named constant

       69 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:69:51: warning: [cppcoreguidelines-avoid-magic-numbers]

    2.5 is a magic number; consider replacing it with a named constant

       69 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                   ^
  • tests/inspection/test-solid-adjacency.cpp:69:57: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       69 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                         ^
  • tests/inspection/test-solid-adjacency.cpp:70:25: warning: [cppcoreguidelines-avoid-magic-numbers]

    5 is a magic number; consider replacing it with a named constant

       70 |     builder->set_point( 5, geode::Point3D{ { 4., 3., -.5 } } );
          |                         ^
  • tests/inspection/test-solid-adjacency.cpp:70:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       70 |     builder->set_point( 5, geode::Point3D{ { 4., 3., -.5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:70:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       70 |     builder->set_point( 5, geode::Point3D{ { 4., 3., -.5 } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:70:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

       70 |     builder->set_point( 5, geode::Point3D{ { 4., 3., -.5 } } );
          |                                                       ^
  • tests/inspection/test-solid-adjacency.cpp:73:39: warning: [cppcoreguidelines-avoid-magic-numbers]

    5 is a magic number; consider replacing it with a named constant

       73 |     builder->create_tetrahedron( { 1, 5, 2, 3 } );
          |                                       ^
  • tests/inspection/test-solid-adjacency.cpp:94:6: warning: [misc-use-internal-linkage]

    function 'check_non_adjacency_wrong_facet' can be made static or moved into an anonymous namespace to enforce internal linkage

       94 | void check_non_adjacency_wrong_facet()
          |      ^
          | static 
  • tests/inspection/test-solid-adjacency.cpp:98:31: warning: [cppcoreguidelines-avoid-magic-numbers]

    5 is a magic number; consider replacing it with a named constant

       98 |     builder->create_vertices( 5 );
          |                               ^
  • tests/inspection/test-solid-adjacency.cpp:99:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
       99 |     builder->set_point( 0, geode::Point3D{ { 0., 0., 2. } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:100:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      100 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:100:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      100 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:101:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      101 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:101:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      101 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:101:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      101 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:102:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      102 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:102:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1.5 is a magic number; consider replacing it with a named constant

      102 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:102:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      102 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                       ^
  • tests/inspection/test-solid-adjacency.cpp:103:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    3.5 is a magic number; consider replacing it with a named constant

      103 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:103:51: warning: [cppcoreguidelines-avoid-magic-numbers]

    2.5 is a magic number; consider replacing it with a named constant

      103 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                   ^
  • tests/inspection/test-solid-adjacency.cpp:103:57: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      103 |     builder->set_point( 4, geode::Point3D{ { 3.5, 2.5, -.5 } } );
          |                                                         ^
  • tests/inspection/test-solid-adjacency.cpp:131:6: warning: [misc-use-internal-linkage]

    function 'check_non_adjacency_inversed_tetrahedron' can be made static or moved into an anonymous namespace to enforce internal linkage

      131 | void check_non_adjacency_inversed_tetrahedron()
          |      ^
          | static 
  • tests/inspection/test-solid-adjacency.cpp:135:31: warning: [cppcoreguidelines-avoid-magic-numbers]

    5 is a magic number; consider replacing it with a named constant

      135 |     builder->create_vertices( 5 );
          |                               ^
  • tests/inspection/test-solid-adjacency.cpp:136:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      136 |     builder->set_point( 0, geode::Point3D{ { 0., 0., 2. } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:137:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      137 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:137:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      137 |     builder->set_point( 1, geode::Point3D{ { 3., .5, 0. } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:138:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      138 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:138:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      138 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                  ^
  • tests/inspection/test-solid-adjacency.cpp:138:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    .5 is a magic number; consider replacing it with a named constant

      138 |     builder->set_point( 2, geode::Point3D{ { .5, 3., .5 } } );
          |                                                      ^
  • tests/inspection/test-solid-adjacency.cpp:139:46: warning: [cppcoreguidelines-avoid-magic-numbers]

    1. is a magic number; consider replacing it with a named constant
      139 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                              ^
  • tests/inspection/test-solid-adjacency.cpp:139:50: warning: [cppcoreguidelines-avoid-magic-numbers]

    1.5 is a magic number; consider replacing it with a named constant

      139 |     builder->set_point( 3, geode::Point3D{ { 2., 1.5, 3. } } );
          |                                                  ^

Have any feedback or feature suggestions? Share it here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant