Delete OrthoSize, and run the seeds in parallel

A span is as long across itself as its longest child, unless a rule beside it
already says how long it is -- and then reading the children answers nothing
and only makes its size depend on theirs. `OrthoSize::Full` was that second
case written twice, once as an enum on the span and once as the rule that
actually decides; `Painter::ruled` lets the span ask which it is in. The
widget under a rule still does not learn what the rule says, only that its
answer for that axis is not wanted.

The fuzzers grow, lay out and drop a tree within one seed, so the seeds share
nothing and take a thread each, one short of every core. Measured here: the
generated oracle's hundred seeds went from 68 s to 10 s, and a shrinker case
at 300 seeds from 18 s to 3.5 s. A seed that fails still shrinks and panics
on its own thread, and `std::thread::scope` carries that out.

The shrinker now allows the two steps the oracle already did -- the deeper
trees these grow reach a second composition, and a step is a thousandth of a
pixel.

Checked: fmt, clippy, 102 tests, all five shrinker cases at 300 seeds, 100
generated seeds, and five examples byte-identical at 1920x1200.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
iris-aiandClaude Opus 5 committed 2026-09-16 03:18:49 -04:00
1 parent cb955f1023
commit 9d8415d65f
8 files changed
+94 -74

No files matched your search

-5
View File
@@ -160,7 +160,6 @@ fn plant_pair(h: &mut Harness, swapped: bool) -> (Vec<WidgetId>, WeakWidget<Span
children,
dir: Dir::RIGHT,
gap: Px::ZERO,
ortho: OrthoSize::Children,
}
.add(&mut h.rsc);
let span_handle = span;
@@ -214,7 +213,6 @@ fn plant_scrolled(h: &mut Harness, swapped: bool) -> (Vec<WidgetId>, [WeakWidget
children: inner_children,
dir: Dir::RIGHT,
gap: Px::ZERO,
ortho: OrthoSize::Children,
}
.add(&mut h.rsc);
let block = rect(Color::RED).add(&mut h.rsc);
@@ -228,7 +226,6 @@ fn plant_scrolled(h: &mut Harness, swapped: bool) -> (Vec<WidgetId>, [WeakWidget
children: outer_children,
dir: Dir::RIGHT,
gap: Px::ZERO,
ortho: OrthoSize::Children,
}
.add(&mut h.rsc);
// Carried no rule even before rules were a property: it is here to be a
@@ -337,7 +334,6 @@ fn plant_boundary(h: &mut Harness, swapped: bool) -> (Vec<WidgetId>, [WeakWidget
children: pair,
dir: Dir::DOWN,
gap: Px::ZERO,
ortho: OrthoSize::Children,
}
.add(&mut h.rsc);
// Takes the whole box on its own, so the span above has nothing left to
@@ -357,7 +353,6 @@ fn plant_boundary(h: &mut Harness, swapped: bool) -> (Vec<WidgetId>, [WeakWidget
children: inner_children,
dir: Dir::DOWN,
gap: Px::ZERO,
ortho: OrthoSize::Children,
}
.add(&mut h.rsc);
h.rsc