Commit Graph

6 Commits

Author SHA1 Message Date
Brett Lawson 73c56377e3 difftest(topology.assert_valid): check operations on an SmApiBrepCopy against C++ (#1631)
Shim op 4 runs SmApiBrepCopy, then a union with a box (or with a box's
copy), SmApiFilletEdges or SmApiShellBrepFull on the copy, then the capi
check of the result; the Rust side runs the same operations on its
caller-keyed api_brep_copy and check_brep. 12 cases in
fixtures/topology.assert_valid/copy_ops.json, all valid on both sides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 07:25:45 +01:00
Brett Lawson 2970c29d42 difftest(topology.assert_valid): check SmApiBrepCopy copies (#1584)
Shim op 3 runs the capi check sequence on the body's SmApiBrepCopy; the
Rust side copies with api_brep_copy under caller keys and runs check_brep
by the copy's naming. 48 fixture cases compare the check outcome.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-29 23:39:46 +01:00
bherbruck e15358a740 Merge origin/main into port/assert-valid-level2 (#1478)
Conflicts resolved in topology/vertex.rs (doc list), harness/callgraph/units.json (union, main first) and plan/units/topology.{assert_valid,face_p4,vertex}.toml (main's notes plus the PR's suffix).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-29 10:00:14 -04:00
Brett Lawson 74a126826d Wire the AssertValid surface seam to SmSurface::AssertValid
The face walk's surface check now calls Surface::assert_valid (#1460).
Upstream SmPlane reports its placement checks under &m_vPosition; the
port names them by the surface key, so the shim maps the plane's
GetPosition() address to that surface's report identity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-29 09:54:20 +01:00
Brett Lawson a330547e14 topology.assert_valid: difftest the level-2 tests one by one (shim op 2)
Op 2 runs sm_AssertTestFace32/33/38 per face, sm_AssertTestEdge13 per edge
and sm_AssertTestVertex1 per vertex on both sides (the full walk defers at
the level-0 seams until WP2/WP3a land). Fixtures: 202 op-2 cases over
primitives, upstream .smb files, planar/B-spline/thin faces and vertex
and tolerance mutations; 94 level-2 AssertValid / capi cases. Drops
CalcEdgeFormFromFaces from the call-graph entries: IsOnFaceEdgeForm reads
the cached edge/face gaps and does not call it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtgaA54W2nr8dK1EYp
2026-10-29 06:39:48 +01:00
Brett Lawson cde2ad1de3 Port SmBrep::AssertValid whole-body check and check_brep API (#1419 WP1)
Ports the AssertValid walk over every topology level (Brep, Region, Shell,
Face, Faceuse, Loop, Loopuse, Edge, Edgeuse, Vertex, Vertexuse level-0
bodies, the SmTopology/SmOwningTopology/SmSAGObject base checks, the
validate-only tolerance pass and the SmCurve::AssertValid dispatch), plus
SmAssertReport::FormatLogMessage and SM_GetObjTypeString, behind a public
check_brep -> BrepCheck API matching the capi smlib_brep_check sequence.
Calls into checks owned by later packages go through UNPORTED seams.

New difftest unit topology.assert_valid (shim, ffi binding, runner, 516
fixtures over primitives, constructed bodies, upstream .smb files and ten
mutation kinds): 532 cases, 153 pass, 378 deferred on the seams, 1 known
mismatch in the existing ValidatePointers port (recorded as a finding).
Regression tests in crates/solidcore/tests/issue_1419_brep_check.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtgaA54W2nr8dK1EYp
2026-10-29 06:06:56 +01:00