WIP: a stack does not take its sizing child's fraction twice
Every child gets the whole of the stack's box rather than `box_of(size)`, and `widget_at` does not resolve a rule into a box already chosen from it. Fixes half a row becoming a quarter, which no oracle can see because warm and cold shrink alike. Pinned by `a_stack_sized_by_a_child_does_not_take_that_childs_fraction_twice`. Not landed. Seed 1091 at depth 4, `shuffle-swap-for-three`, disagrees by three steps of the grid -- warm 1053.9971 against cold 1054 -- where the oracle tolerates two. Not a structural divergence: `box_of` was also making a child's placement exact, by handing it a box of exactly the length it asked for, and giving it the whole box instead puts a rounding back at each nesting level. Two nested stacks is three steps. Widening AGREE_STEPS is not the answer; finding the composition that went from exact to rounded is. Everything else is green: suite, shrinker at 400 seeds of depth 5, oracle at 1000 seeds of depth 6, and the rest of 2000 seeds at depth 4. Also carries examples/text.rs's top panel taking the full width.
This commit is contained in:
1 parent
a92c6acdbf
commit
a2cb4f05da
4 files changed
+66
-27
No files matched your search
@@ -82,6 +82,31 @@ fn a_text_in_a_span_wraps_at_the_room_left_rather_than_the_whole_row() {
|
||||
assert!(crowded > whole_row, "{crowded} against {whole_row}");
|
||||
}
|
||||
|
||||
/// A stack takes its size from one child and gives every child that size, so
|
||||
/// a child asking for half of it is asking for half of what it is itself the
|
||||
/// size of. Once the stack has been placed at the length it reported that
|
||||
/// length is the box, and taking the fraction of it again takes it twice:
|
||||
/// half a row became a quarter, and a further stack around it a further half.
|
||||
/// Nothing pinned it because a pixel is the same length wherever it is taken
|
||||
/// from, so only a share ever shrank -- and warm and cold shrink alike, so no
|
||||
/// oracle saw it either.
|
||||
#[test]
|
||||
fn a_stack_sized_by_a_child_does_not_take_that_childs_fraction_twice() {
|
||||
let mut h = Harness::new((400, 200));
|
||||
let half = rect(Color::RED).width(rel(0.5)).add(&mut h.rsc);
|
||||
let behind = rect(Color::BLUE).add(&mut h.rsc);
|
||||
let stack = Stack {
|
||||
children: vec![behind.add_strong(&mut h.rsc), half.add_strong(&mut h.rsc)],
|
||||
size: StackSize::Child(1),
|
||||
}
|
||||
.add(&mut h.rsc);
|
||||
h.set_root((stack,).span(Dir::RIGHT).width(rel(1.0)));
|
||||
|
||||
assert_corners!(h, stack, (0, 0), (200, 200));
|
||||
assert_corners!(h, half, (0, 0), (200, 200));
|
||||
assert_corners!(h, behind, (0, 0), (200, 200));
|
||||
}
|
||||
|
||||
/// The same reading through a pad: its inset is the whole box less the
|
||||
/// padding, so half of the inset plus the padding is half the box plus one
|
||||
/// padding, not two.
|
||||
|
||||
Reference in new issue
Block a user