From 968d79399d90fc6459dd24c216297569284ca3a3 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Thu, 24 Sep 2026 00:12:49 +0200 Subject: [PATCH] Hold the fence's entered rows to the render's pin set --- table_test.go | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/table_test.go b/table_test.go index 6b90f75..f9987b1 100644 --- a/table_test.go +++ b/table_test.go @@ -964,9 +964,10 @@ func TestAmbiguousNameNamesARunnablePath(t *testing.T) { } } -// TestRowSetSimulatesPinning holds the walk's row set to the render's pinning: drift between -// the two is data that loads and then renders a family that disagrees. -func TestRowSetSimulatesPinning(t *testing.T) { +// TestEnteredRowsAgreeWithPinning holds what a fence walk decides about the rows it entered to what +// pinning them refuses at render: drift between the two is data that loads and then renders a +// family that disagrees. +func TestEnteredRowsAgreeWithPinning(t *testing.T) { f := newGenerator(t, writeFiles(t, geo()), WithSeed(1)) var tables []*table for _, category := range []string{"region", "municipality", "locality"} { @@ -976,33 +977,24 @@ func TestRowSetSimulatesPinning(t *testing.T) { } tables = append(tables, tbl) } + var none pinSet for _, entered := range tables { for row := 0; row < entered.rows(); row++ { - if drawn := rowSet(nil).enter(entered, row, false); len(drawn) != 1 || drawn[0] != (tablePin{entered, row}) { + var drawn []tablePin + alone := none.entered(entered, row, false) + alone.each(func(tbl *table, r int) { drawn = append(drawn, tablePin{tbl, r}) }) + if len(drawn) != 1 || drawn[0] != (tablePin{entered, row}) { t.Errorf("a drawn %s enters %v, want its own row alone", entered.selectorSpelling(row), drawn) } - s := rowSet(nil).enter(entered, row, true) - var pinned hold - held := 0 - pinned.pin(entered, row) - pinned.each(func(tbl *table, r int) { - held++ - if got, in := s.rowOf(tbl); !in || got != r { - t.Errorf("entering %s leaves %s unset, though pinning it pins %s", entered.selectorSpelling(row), tbl.path, tbl.selectorSpelling(r)) - } - }) - if held != len(s) { - t.Errorf("entering %s holds %d rows, though pinning it pins %d", entered.selectorSpelling(row), len(s), held) - } + s := none.entered(entered, row, true) for _, cand := range tables { for cr := 0; cr < cand.rows(); cr++ { - var beside hold - beside.pin(entered, row) + beside := s refused := beside.pinRow(cand, cr) != nil if got := s.excludes(&template{cellOf: cand, cellRow: cr}); got != refused { t.Errorf("excludes(%s) = %v beside %s, but pinRow refuses it = %v", cand.selectorSpelling(cr), got, entered.selectorSpelling(row), refused) } - if got := alternatives(drawAt{alt: s}, drawAt{alt: rowSet(nil).enter(cand, cr, true)}); got != refused { + if got := alternatives(drawAt{alt: s}, drawAt{alt: none.entered(cand, cr, true)}); got != refused { t.Errorf("alternatives(%s, %s) = %v, but pinning both refuses = %v", entered.selectorSpelling(row), cand.selectorSpelling(cr), got, refused) } }