ref: c5076be383d7630d70666a543306c8f6ee65edb9
parent: c224416c76e41f284b318adc51f08c3ed11de8e2
author: Simon Tatham <anakin@pobox.com>
date: Sun Jun 25 11:20:50 EDT 2023
Keen: fix another misuse of dsf_canonify. Chris Boyle points out that outline_block_structure has a comment saying that we're supposed to have picked a square with a boundary to its left. dsf_canonify no longer guarantees that, but dsf_minimal does. Switch to using that throughout the function. 'keen --generate 10#12345 --print 5x2' failed an assertion before this fix, and now doesn't.
--- a/keen.c
+++ b/keen.c
@@ -2257,7 +2257,7 @@
* Iterate over all the blocks.
*/
for (i = 0; i < a; i++) {
- if (dsf_canonify(dsf, i) != i)
+ if (dsf_minimal(dsf, i) != i)
continue;
/*
@@ -2296,11 +2296,11 @@
tx = x - dy + dx;
ty = y + dx + dy;
nin += (tx >= 0 && tx < w && ty >= 0 && ty < w &&
- dsf_canonify(dsf, ty*w+tx) == i);
+ dsf_minimal(dsf, ty*w+tx) == i);
tx = x - dy;
ty = y + dx;
nin += (tx >= 0 && tx < w && ty >= 0 && ty < w &&
- dsf_canonify(dsf, ty*w+tx) == i);
+ dsf_minimal(dsf, ty*w+tx) == i);
if (nin == 0) {
/*
* Turn right.
@@ -2337,9 +2337,9 @@
* somewhere sensible.
*/
assert(x >= 0 && x < w && y >= 0 && y < w &&
- dsf_canonify(dsf, y*w+x) == i);
+ dsf_minimal(dsf, y*w+x) == i);
assert(x+dx < 0 || x+dx >= w || y+dy < 0 || y+dy >= w ||
- dsf_canonify(dsf, (y+dy)*w+(x+dx)) != i);
+ dsf_minimal(dsf, (y+dy)*w+(x+dx)) != i);
/*
* Record the point we just went past at one end of the