solidcore

Units / intersect

intersect.curve_class_p5 partial

Layer
36
Upstream lines
2,017
Functions
7
Rust module
intersect::curve_class::p5

Source: crates/solidcore/src/intersect/curve_class/p5.rs

Upstream: source/SMLib/src/SmCurveClass.cpp

Notes

PARTIAL (PR #150), validated on source 9e495b12: 1081 cases (281 fixed + 800 generated), 275 bit-identical comparisons, 0 failed, 806 deferred (intersect.curve_class_p2 493, intersect.curve_class_p7 312, curve.crv_on_surf 1); perturbation detects 275/275. Nine affected native runners, plain/native Clippy, 1215 kernel tests, WASM and focused FFI regression pass. All eight other reports regenerate unchanged. No absolute floors. Part 6 landed independently through PR #138 and its Homogenize/FixEndPointClass/InsertCurveInterval/MergeInterval are wired; p2/p7 remain independent. Edge-target insertion remains unported (p2/p7); the entire SSS block remains unported before mutation and names its real boolean.topology_intersector_p1 mate dependency, with preceding mutable ownership wiring still needed. Nonempty large-gap projection remains uncertified. All 24 zero_tangent cases defer to p2. Missing vertex/gap callback data returns InvalidInput. No-face large-gap cutoff retains the native default (twice system zone), tested independently of the solver; Rust continues on an ownerless surface (UB-126). The generic-Surface CrvOnSurf type-dispatch gap is documented in its partial owner's notes. Small shared interfaces are CO-PORTED in point_class, curve_class_p1 and query.face_p2 notes. Proto-topology p3 extraction is wired; classification_vertex_point avoids the ProtoBrep collision. Deviations: object_index > 1 rejected; unresolved p5_closed curve errors instead of FALSE; runner face zone tolerance zero is not compared. UB-134 is assigned to this PR by the maintainer. 7 owned functions; largest: sm_InsertSolutions, SmCurveClassification::IntersectVertices, SmCurveClassification::MergeClassifications, SmCurveClassification::ExtractGeometry; cycle back-edges (call into later units; stub or co-port): topology.edge(6), topology.vertex(5), boolean.topology_intersector_p1(2), heal.gap(1), topology.edgeuse_p1(1), topology.vertexuse(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; full CI evidence is tracked in the PR description. Merge of PR #65: GetPointClassByIndex wired to p7; difftest now 1081 cases, 416 passed, 0 failed, 665 deferred. Rust adapter extended in heal.heal_data_p3 (PR #164): merge_intervals_with_partial retains completed intervals' output on failure for native ignored-status callers; unit accumulator regression covers failure in both passes. Public merge_intervals result contract is unchanged. SELF-DEFERRAL (noted by PR #146): the GWC:CHANGED_SSS block of SmCurveClassification::IntersectVertices (SmCurveClass.cpp:14826-15095) is UNPORTED(intersect.curve_class_p5) in p5.rs; porting it needs mutable curve/B-rep access in IntersectVertices plus a mate-lookup closure (boolean.topology_intersector_p1's other_mate / brep_mate).

Difftest

Cases
1,081
Passed
416
Deferred
665
Failed
0
Both errored
0
Max rel. error
0.0
Tolerance
1e-09 rel.
Seeds
16

Blocked by

Unported unitDeferred cases
intersect.curve_class_p2 claimed664
curve.crv_on_surf partial1

Report JSON (per-case results)

Dependencies

Depends on: curve.curve_p2 green geom.extent1d green geom.object partial geom.solution_array partial geom.tol green geom.vector2d green geom.vector3d green intersect.curve_class_p1 partial intersect.curve_class_p2 claimed intersect.curve_class_p3 partial intersect.curve_class_p6 partial intersect.curve_class_p7 partial intersect.point_class partial surface.surface_p2 partial

Soft dependencies: curve.crv_on_surf partial curve.curve_p1 partial curve.curve_p4 partial nurbs.b_spline_curve_n_lib green nurbs.b_spline_curve_p1 green nurbs.b_spline_surface_p1 green surface.surface_p4 green surface.surface_p5 green

Dependents: intersect.curve_class_p8 partial intersect.curve_class_p9 partial

Soft dependents: boolean.topology_intersector_p1 partial boolean.topology_intersector_p3 claimed heal.heal_data_p3 partial query.face_p2 partial topology.brep_p2 claimed topology.brep_p7 claimed topology.face_p1 partial topology.face_p3 claimed topology.proto_topology_p3 partial

Upstream functions

Upstream functionDefined atLinesRust (from the file header)
sm_InsertSolutionsSmCurveClass.cpp:4158634[insert_solutions]
SmCurveClassification::ExtractGeometrySmCurveClass.cpp:13465167[CurveClassification::extract_geometry]
SmCurveClassification::FixupClassificationSmCurveClass.cpp:1409697[CurveClassification::fixup_classification]
SmCurveClassification::InsertTopologyIntersectionsSmCurveClass.cpp:14473129[CurveClassification::insert_topology_intersections]
SmCurveClassification::IntersectVerticesSmCurveClass.cpp:14643607[CurveClassification::intersect_vertices]
SmCurveClassification::MergeClassificationsSmCurveClass.cpp:16530261[CurveClassification::merge_classifications]
SmCurveClassification::MergeIntervalsSmCurveClass.cpp:18578122[CurveClassification::merge_intervals]
Module file-header table (7 rows)
RustUpstream
[insert_solutions]sm_InsertSolutions (static)
[CurveClassification::extract_geometry]SmCurveClassification::ExtractGeometry
[CurveClassification::fixup_classification]SmCurveClassification::FixupClassification
[CurveClassification::insert_topology_intersections]SmCurveClassification::InsertTopologyIntersections
[CurveClassification::intersect_vertices]SmCurveClassification::IntersectVertices
[CurveClassification::merge_classifications]SmCurveClassification::MergeClassifications
[CurveClassification::merge_intervals]SmCurveClassification::MergeIntervals

Upstream tests reaching this unit

prog_test:my_test_surface_closest_point, prog_test:my_test_drop_point, prog_test:my_test_matrix, prog_test:my_test_reversed_line_join, SM_API_test:TestSmCreateRectangle, SM_API_test:TestSmCreateRegularPolygon