The eleventh sweep, over the built-in bounds work in2ac0843. `Painter::size_hint` refused to answer for a bounded widget by returning above the diagnostics, so that read was neither a hint hit nor a miss and `hint_read` recorded nothing. It is a miss now, with the reason on it. The two `for axis in Axis::BOTH` loops that `draw_widget` grew, both writing `own_holds`, are one loop, and the comment about combining the ask's holds no longer sits between a comment and the code it describes. `Declared::from_axes` lost its only caller with `Widgets::declared_lens`; `Bounds::from_axes` and `SizeRule::declared` never had one. The scenario shrinker printed a rule with derived `Debug`, which is 130 characters an axis in a line that carries every ancestor, in the one function whose job is output a tree can be rebuilt from. It prints its parts again. `bounds_cost` invented three environment-reading spellings where four copies of one `env` helper already existed; there is now one, in `tests/rig`, and the four copies are gone. It also verified 128 regions inside its measured loop, which the other rigs deliberately do before theirs; that measured 0.65% of the total, and none of it is layout. The 250-window row with a 300 cap was built by two tests, and the one that still explained itself tested less; they are one. The half of `a_cap_attribute_narrows_the_widgets_box` that the wrapper's removal left without its deciding assertion is the allocator's path instead, which nothing at the root covered. Format, workspace clippy under -D warnings with and without layout-diagnostics, 206 ordinary and 210 diagnostic tests, 400 depth-5 trees warm against cold in 64.19s, and the cold dump byte-identical to2ac0843across all 34,986 boxes.
44 lines
1.7 KiB
Rust
44 lines
1.7 KiB
Rust
//! Prints where a cold layout puts every widget of many grown trees, so two
|
|
//! commits can be compared on cold layout alone. The warm/cold oracle cannot
|
|
//! see a change that moves cold layout, since both of its sides move; this
|
|
//! can, by diffing its output across the change:
|
|
//!
|
|
//! IRIS_DUMP_SEEDS=400 IRIS_DUMP_DEPTH=5 cargo test --release \
|
|
//! --test layout_dump -- --ignored --nocapture > /tmp/before.txt
|
|
//!
|
|
//! then the same after, and `diff` the two. A line is one widget: the seed,
|
|
//! its index in creation order, and its box in window pixels, or `-` where
|
|
//! it is not drawn. `IRIS_UNBOUNDED=1` drops the trees' intrinsic bounds, as
|
|
//! in the diagnostics rig, which compares the two paths over the same shapes.
|
|
|
|
mod rig;
|
|
|
|
use iris::harness::Harness;
|
|
use iris::random::{Edits, build, plan};
|
|
use rig::env;
|
|
|
|
#[test]
|
|
#[ignore = "a dump to diff across commits, not a check"]
|
|
fn every_cold_layout_is_printed() {
|
|
let seeds = env("IRIS_DUMP_SEEDS", 400_u64);
|
|
let depth = env("IRIS_DUMP_DEPTH", 5_usize);
|
|
let mut out = String::new();
|
|
for seed in 1..=seeds {
|
|
let mut harness = Harness::new((1920.0, 1200.0));
|
|
let mut plan = plan(seed, depth, &Edits::default());
|
|
if env("IRIS_UNBOUNDED", 0_u8) != 0 {
|
|
plan.drop_bounds();
|
|
}
|
|
let (root, tree) = build(&mut harness.rsc, &plan);
|
|
harness.state.root = Some(root);
|
|
harness.frame();
|
|
for (index, id) in tree.ids.iter().enumerate() {
|
|
match harness.region(id) {
|
|
Some(region) => out.push_str(&format!("{seed} {index} {region:?}\n")),
|
|
None => out.push_str(&format!("{seed} {index} -\n")),
|
|
}
|
|
}
|
|
}
|
|
print!("{out}");
|
|
}
|