Commit Graph

6 Commits

Author SHA1 Message Date
Brett Lawson ce95ad8360 Merge #140 (intersect.surface_drop_lib_p1) into tests/ssi-adv-after-140, resolving its conflicts with main
#140's head c70653a63 merged with main ea10fd3e2. Resolutions:
- surface_cache/p1.rs: #140's iso curves through the surface's own
  dispatch (main's Surface::create_iso_parametric_curve covers Cone too),
  stored as Curve; approximate_length takes main's kernel.
- surface_intersector/p2.rs, p4.rs, adv_surface_intersector.rs: #140's
  `advanced` flag and tests with main's kernel argument; p4 keeps main's
  stricter find_interior_curves test.
- intersect_surface_drop_lib_p1 runner and FFI: both sides kept (#140's
  Trim curve types and NULL entries, #438's file inputs and optional
  domain/interval); #140's generators wrap Trim domain/interval in Some.
- Kernel arguments added to #140's new evaluate/evaluate_point/
  SurfaceDropCurve::new calls (main threaded the kernel through).
- plan/modules.toml: both notes kept for surface.plane_p2 and
  surface_intersector_p3/p4. Reports regenerated on the merged tree.

--green: 247 units, 128 passed, 119 partial, 0 failed
PARTIAL surface.surface_p2 cases=16688 passed=16672 failed=0 deferred=16
(all 56 my_test_ssi_adv pairs: the eight re-added files pass)
cargo test -p solidcore 1768 passed; clippy, fmt, wasm32 clean

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:42:25 -07:00
Brett Lawson 668d43e3f0 difftest: surface_drop_lib_p1 DropAndTrimCurve cases from prog_test
Replicates the five DropAndTrimCurve calls of upstream prog_test
my_test_drop_curve on Drop/PS10_drp_Crv1..5 / Srf1..5 (natural domain
and interval, tol 1e-2, the header defaults). Curves and surfaces can now
be upstream files: C++ reads them with SmBSplineCurve/SmBSplineSurface
::ReadFromFile, Rust repeats its steps (database version 30, then
read_from_db). Trim's domain and interval become optional (natural when
absent).

The five cases are deferred: Rust stops at the drop_curve_trace back-edge
UNPORTED(intersect.surface_drop_curve) although that unit is now partial;
wiring it turns them into compared cases.

PARTIAL intersect.surface_drop_lib_p1 cases=1867 passed=1847 failed=0 deferred=20
--perturb: SENSITIVE; --fuzz 300: FUZZ-PASS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 10:47:43 -07:00
bherbruck c70653a63b intersect.surface_drop_lib_p1: second review fixes
- Generator back to main's buckets (88..=98 iso, 99 plane line) so every
  generated case keeps its inputs; the wider trim generator runs as 400
  fixed-seed cases trim0000..trim0399 appended after the 1500.
- Wire the surface cache iso curves of planes and surfaces of revolution
  (SmPlane / SmSurfOfRevolution::CreateIsoParametricCurve), taking PR #270's
  surface_cache/p1.rs and caller changes unchanged, plus the plane branch of
  GetIsoBoundaryCurves (gen0072 of surface_intersector_p5 passes here thanks
  to the ComputeSingularityPoint dispatch fix).
- Trim record carries each UV curve's GetType(); the shim writes a
  NULL_CURVE sentinel for a NULL entry.
- surface.plane_p2 and surface.surface_cache_p3 promoted to green; notes,
  findings and reports updated.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pfe7dodPG5rpuN9B8QcnuX
2026-10-21 03:45:16 -04:00
jijinbei 875291c4d9 shim: share identical C++ helpers through sc_sm.h, sc_nlib.h, sc_gw.h
125 shims carried private copies of the same small helpers (put_vec, st,
nl_status, Rd, dump_crv, read_nurb, ...). Move the most common, byte-identical
form of each into three headers grouped by the upstream API they need, and have
those shims pull them in with `using sc::<name>;`. Shims with a different
variant keep their own copy; files touched by open PRs are left alone.
`the_context()` stays per shim (its function-local SmContext must not be shared).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBLgPenT24P1dunqnZR1Dj
2026-10-17 06:43:03 +09:00
bherbruck e2d02763c3 intersect.surface_drop_lib_p1: review fixes
- difftest runner: fix the clippy errors under --features difftest/cpp
  (collapsible if in span_undefined, unchecked indexing in
  gen_bspline_surface and gen_seam); rng draw order unchanged.
- Correct the "uninitialised" wording: after an ignored failed evaluation
  upstream goes on with SM_UNDEF_DOUBLE defaults or partial writes (defined);
  the port does not model that path and the shim rejects it (never fires).
- Add 328 review fixtures on poles (cone apex, spheres r=1/1e3, both swaps)
  and a collapsed-edge B-spline: all pass bit-identical or defer.
- difftest: 1862 cases, 1683 passed, 0 failed, 179 deferred; perturb
  1683/1683.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-15 05:39:30 -04:00
bherbruck ec6cee51ac port: intersect.surface_drop_lib_p1 (SmDropPt helpers, DropIsoCurve, DropAndTrimCurve)
Ports the SmSurfaceDropLib.cpp part 1 functions: SmDropPt (ctor, operator=,
SetUninitialized, IsGoodTangentDrop, IsMovingAlongBoundary, TestSpanAccuracy,
CheckSeamJump, FixBoundaryTangents), sm_PushPoint / sm_PopStack / sm_StackLook,
sm_FixBoundaryCurves, sm_RemoveDuplicateDropPointSolutions, SmSurface::DropIsoCurve
and SmSurface::DropAndTrimCurve, with the C++ shim (compiles the upstream file),
FFI binding, difftest runner and fixtures. Wires the DropAndTrimCurve stub in
intersect.surface_intersector_p3.

difftest: PARTIAL cases=1534 passed=1396 failed=0 deferred=138 max_rel_err=0
(surface.surface_p3 123, intersect.surface_drop_curve 15); --perturb SENSITIVE.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-15 04:50:15 -04:00