Retain layout sizes by pixel axis
This commit is contained in:
1 parent
82fa6c1123
commit
b1b3eca1c0
11 files changed
+371
-69
No files matched your search
+14
-17
@@ -17,20 +17,11 @@ use iris::prelude::*;
|
||||
use iris::random::{Edits, Lens, Rng, SpanEdit, Tree, grow};
|
||||
|
||||
const DEPTH: usize = 4;
|
||||
const SEEDS: [u64; 6] = [1, 2, 3, 5, 8, 13];
|
||||
const REGION_ULPS: u32 = 4;
|
||||
|
||||
fn ordered_bits(value: f32) -> u32 {
|
||||
const SIGN: u32 = 1 << 31;
|
||||
let bits = value.to_bits();
|
||||
match bits & SIGN {
|
||||
0 => bits | SIGN,
|
||||
_ => !bits,
|
||||
}
|
||||
}
|
||||
const SEEDS: [u64; 7] = [1, 2, 3, 5, 8, 13, 98];
|
||||
const REGION_EPSILON_PX: f32 = 0.05;
|
||||
|
||||
fn same_coordinate(got: f32, want: f32) -> bool {
|
||||
got == want || ordered_bits(got).abs_diff(ordered_bits(want)) <= REGION_ULPS
|
||||
(got - want).abs() <= REGION_EPSILON_PX
|
||||
}
|
||||
|
||||
fn same_region(got: Option<PixelRegion>, want: Option<PixelRegion>) -> bool {
|
||||
@@ -165,9 +156,10 @@ fn assert_same(seed: u64, what: &str, warm: (&Harness, &Tree), cold: (&Harness,
|
||||
for (i, (&w, &c)) in wt.ids.iter().zip(&ct.ids).enumerate() {
|
||||
let (got, want) = (wh.region(&w), ch.region(&c));
|
||||
drawn += usize::from(got.is_some());
|
||||
// Equivalent composition orders can differ by a few f32 ULPs. Bound
|
||||
// that representation drift directly, while whether a widget drew
|
||||
// remains exact.
|
||||
// This oracle cares where rasterization lands, not whether equivalent
|
||||
// arithmetic produced the same f32. Keep the tolerance to one
|
||||
// twentieth of a physical pixel, while whether a widget drew remains
|
||||
// exact.
|
||||
if same_region(got, want) {
|
||||
continue;
|
||||
}
|
||||
@@ -327,9 +319,14 @@ fn adding_and_removing_span_children_lands_where_growing_it_that_way_would() {
|
||||
/// same defect, and it wants fixing where the two draws meet -- LAYOUT.md §4 --
|
||||
/// rather than anywhere in the chain.
|
||||
#[test]
|
||||
#[ignore = "a hundred seeds, rather than the six the others check"]
|
||||
#[ignore = "a hundred seeds, rather than the seven the others check"]
|
||||
fn a_long_run_of_seeds_agrees() {
|
||||
for seed in 1..=100 {
|
||||
let seeds = std::env::var("IRIS_GENERATED_SEED")
|
||||
.ok()
|
||||
.and_then(|seed| seed.parse().ok())
|
||||
.map(|seed| seed..=seed)
|
||||
.unwrap_or(1..=100);
|
||||
for seed in seeds {
|
||||
changed_size(seed);
|
||||
resized(seed);
|
||||
resized_then_changed(seed);
|
||||
|
||||
Reference in new issue
Block a user