Eleven `tests/*.rs` were eleven binaries, each linking the whole graph -- `wgpu` and all -- to run a handful of cases. They are modules of one target now, under `tests/cases/`, and `cargo test --test suite layout::` still picks one out. The fuzzers and the `*_cost` measurements stay their own targets: they are run on their own and want to be selectable without building the rest. `profile.test` takes `debug = "line-tables-only"`, which is what a backtrace here actually reads; the type and variable information was the bulk of what the linker was writing. Measured on this machine, rebuilding `iris`'s test targets after a change to the crate: 14.3 s before, 9.8 s with one target, 7.7 s with both. `target/` went from 45 GB to 13 GB. The suite still passes 102 tests, and the binary still carries `.debug_line`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
//! Whether measuring a widget and then giving it the length it reported is a
|
|
//! fixed point, which is what a span that sizes to its children needs.
|
|
|
|
use iris::harness::Harness;
|
|
use iris::prelude::*;
|
|
|
|
#[test]
|
|
fn a_wrapping_text_in_a_span_settles_on_one_width() {
|
|
let mut h = Harness::new((900, 600));
|
|
let words = "the quick brown fox jumps over the lazy dog and keeps on running \
|
|
until it reaches the end of a rather long line of text";
|
|
let t = wtext(words).size(16).wrap(true).add(&mut h.rsc);
|
|
let filler = rect(Color::BLUE).add(&mut h.rsc);
|
|
h.set_root((t, filler).span(Dir::RIGHT));
|
|
|
|
let mut widths = Vec::new();
|
|
for _ in 0..6 {
|
|
let r = h.region(&t.id()).unwrap();
|
|
widths.push(r.bot_right.x - r.top_left.x);
|
|
// Redrawing it changes nothing about the state, so nothing may move.
|
|
h.rsc.widgets_mut().get_dyn_mut(t.id());
|
|
h.frame();
|
|
}
|
|
println!("widths over six frames: {widths:?}");
|
|
assert!(
|
|
widths.windows(2).all(|w| w[0] == w[1]),
|
|
"a repaint that changed nothing moved it: {widths:?}"
|
|
);
|
|
}
|