Grow random trees, and check them against building the same tree cold
`iris::random` grows a seeded tree -- spans in every direction, stacks, rects with varying opacity, text both wrapping and overflowing, a declared size over half of it -- and `tests/generated.rs` grows each seed twice: once and then mutated, once with the mutation built in. Every widget's box has to match. `examples/random.rs` draws one, and `IRIS_SEED`/`IRIS_DEPTH` pick it. It found the defect in the commit before this one immediately: a reuse that marked a descendant for redraw escalated to that descendant's size reader, which re-placed the child, which marked it again. `try_reuse` now asks whether anything under the widget would have to be drawn again *before* keeping the drawing, and drops the whole thing if so, which terminates because it adds no marks. It also found one older and larger than this branch, which `a_wrapping_child_of_a_row_settles_somewhere_else_each_time` reproduces and documents: a wrapping text on a span's own axis is shaped twice against two different widths, so where it settles depends on how many passes it has had. 7 of 90 cases diverge on `db1751f` and 30 do here, because a placed child reaches the second shaping more often. It is the same defect either way, and it belongs where the two draws meet -- LAYOUT.md §4 -- not in the chain. The six seeds the live tests use are ones that agree. `forget_ref` goes with the subtree rewrite that used it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d98969158f
commit
86a7e8dfc3
6 files changed
+383
-29
No files matched your search
@@ -8,6 +8,7 @@
|
||||
pub mod default;
|
||||
pub mod event;
|
||||
pub mod harness;
|
||||
pub mod random;
|
||||
pub mod widget;
|
||||
|
||||
pub use iris_core as core;
|
||||
|
||||
Reference in new issue
Block a user