Skip to content

difftest: trans_sweep_geometry op 8 makes its face with CreateFaceFromSurface and compares failed statuses - #692

Merged
bherbruck merged 5 commits into
tangency-labs:mainfrom
brett19:recover/trans-sweep-face-fixture
Oct 24, 2026
Merged

bherbruck merged 5 commits into
tangency-labs:mainfrom
brett19:recover/trans-sweep-face-fixture

Conversation

@brett19

@brett19 brett19 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Update after merging main (#685 landed): gen0411 now passes, so the unit is green again:
PASS sweep.trans_sweep_geometry cases=788 passed=780 failed=0 deferred=0 rejected=8 max_rel_err=0e0 (CI on the merged head). The unit toml is updated to green.

Scope: sweep.trans_sweep_geometry op 8 (FaceSweepSame), plus findings notes for a few small fixture rejections.

What changed

  • Runner: op 8 now makes its input face with topology::brep::p8::create_face_from_surface over the surface's natural domain, on topology::brep::p3::new_brep(k, USE_DEFAULT, USE_DEFAULT). This matches the native fixture's new SmBrep() + SmBrep::CreateFaceFromSurface. Before, the Rust side pushed a bare face record and set its surface by hand.
  • Shim: a failed CreateFaceFromSurface is now the case's output (its status) instead of SC_ERR_ARG. The other SC_ERR_ARG exits stay: a profile-curve constructor failure, a non-B-spline profile, a failed CreateLinearSweep, and a successful call that returns no face.
  • Re-covered cases: 11 op 8 cases were rejected only because CreateFaceFromSurface failed natively. All 11 now compare [1001] (SM_ERR from MakeFaceWithCurves: a near-degenerate or 1e-9-scale extrusion collapses to a curve) on both sides. The cases are nanoscale_fixture_{0,1,2,4,5}_8, gen0147, gen0256, gen0337, gen0386, gen0405 and gen0471.
  • Still rejected: two op 8 cases, rejected_constructor_{0,2}_8. Their profile curve constructor fails (a 1e-15 line, a 1e-15 radius circle) before any face exists, the same as their op 5-7 siblings.
  • New deferral: gen0411 (a closed circle extrusion) passed against the bare face record. It now defers on topology.face_p2 ("SmFace handle of a surface's face"). In Rust, MakeFaceWithCurves splits the closed face, and finding the infinite region ray-fires the shell, which reaches the face-owned surface cache. This is the same shell ray-fire gap that fix: prepare face geometry for shell ray queries #613 / fix: prepare face geometry for shell ray queries (stacked on #613, merged with main) #685 address. The unit therefore goes from green to partial.
  • plan/findings.md: an entry for the change above. A second entry explains the small fixture rejections that had no recorded reason. None of these is a wrong guard, so their behaviour is unchanged:
    • blend.fillet_geom_p3: regress_corner_edge_on_edge and regress_recalc_analytic_default.
    • boolean.merge_p4: 3 plane operands whose face domain exceeds SM_INFINITE_PARAMETER.
    • offset.offset_executive_p2: the 9 review_sheet_* cases, where a tolerance-collapsed sheet is not representable.

Difftest

Before (main):

PASS sweep.trans_sweep_geometry cases=788 passed=769 failed=0 deferred=0 max_rel_err=0e0 with_values=769 no_values=0 vacuous=0 rejected=19

After:

PARTIAL sweep.trans_sweep_geometry cases=788 passed=779 failed=0 deferred=1 max_rel_err=0e0 with_values=779 no_values=0 vacuous=0 rejected=8 blocked_by=topology.face_p2(1)

Local gate: fmt, clippy -D warnings, cargo test -p solidcore and the wasm32 check pass. Library code is unchanged.

🤖 Generated with Claude Code

brett19 and others added 2 commits October 23, 2026 16:48
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mSurface

The FaceSweepSame fixture built its face natively with
SmBrep::CreateFaceFromSurface but in Rust as a bare face record, and a
failed native CreateFaceFromSurface was recorded as a rejected fixture.
The Rust runner now calls topology::brep::p8::create_face_from_surface on
a B-rep with its infinite region, and the shim returns the failed status
as the case output. The 11 cases that were rejected for it now compare
SM_ERR on both sides; gen0411 now defers on the face-owned surface cache
of a shell ray fire, so the unit is partial.

Also explains in findings.md the small fixture rejections in
blend.fillet_geom_p3, boolean.merge_p4 and offset.offset_executive_p2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brett19
brett19 marked this pull request as ready for review October 24, 2026 00:09
@bherbruck
bherbruck added this pull request to the merge queue Oct 24, 2026
Merged via the queue into tangency-labs:main with commit 20bef40 Oct 24, 2026
7 checks passed
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.

2 participants