Address third round of Gadfly findings on #76
Build image / build-and-push (push) Successful in 7s
Build image / build-and-push (push) Successful in 7s
- hexCenters now derives its exact point count BEFORE building anything and returns it alongside the points, refusing over the cap without allocating. Previously it materialised the whole lattice and fillLoaded checked len() afterwards — so the "too large" path paid for the thing it was rejecting. This also makes the preallocation exact, which subsumes the earlier over-allocation finding I'd declined: staggered rows hold cols-1, so rows*cols over-reserved by ~12%. - Region.empty() names the invariant that clampTo expresses "no overlap" by INVERTING the region rather than zeroing it. A bare `MaxX < MinX` at each call site was spreading a non-obvious convention across three functions. The count is now load-bearing (it gates the cap), so the test asserts it matches what actually gets built. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ
This commit is contained in:
@@ -96,10 +96,15 @@ func TestHexCentersEdgeInset(t *testing.T) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
r := rect(-tc.w/2, -tc.h/2, tc.w/2, tc.h/2)
|
||||
pts := hexCenters(r, tc.radius, tc.spacing)
|
||||
pts, total := hexCenters(r, tc.radius, tc.spacing, maxFillPlops)
|
||||
if len(pts) == 0 {
|
||||
t.Fatal("no centers")
|
||||
}
|
||||
// The count is derived up front so an oversized fill is refused without
|
||||
// building its lattice — which only works if it matches what gets built.
|
||||
if total != len(pts) {
|
||||
t.Errorf("reported total %d, built %d", total, len(pts))
|
||||
}
|
||||
|
||||
// A clump may cross the edge, but only by the half-spacing the rule
|
||||
// allows — never enough to be mostly out in the path.
|
||||
@@ -168,7 +173,7 @@ func TestHexCentersTinyRegion(t *testing.T) {
|
||||
{"off in a corner", rect(20, -40, 30, -30), 25, -35},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
pts := hexCenters(tc.r, 15, 10)
|
||||
pts, _ := hexCenters(tc.r, 15, 10, maxFillPlops)
|
||||
if len(pts) != 1 || pts[0].x != tc.wantX || pts[0].y != tc.wantY {
|
||||
t.Errorf("got %+v, want one plop at (%v,%v)", pts, tc.wantX, tc.wantY)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user