mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-09 20:31:29 +11:00
Tune transform test parameters
Previous threshold was seeing occasional failures, and also fairly wide variance in the error. This seems to be reliable, but hasn't been validated extremely rigorously.
This commit is contained in:
parent
47f8812e2f
commit
8f7ed161a6
|
@ -31,7 +31,7 @@ struct AffineTestData {
|
|||
pub unsafe fn transform_test(runner: &mut Runner, config: &Config) -> TestResult {
|
||||
let mut result = TestResult::new("transform");
|
||||
let n_elements: u64 = config.size.choose(1 << 12, 1 << 18, 1 << 24);
|
||||
// TODO: would be nice to validate with real transform.
|
||||
// Validate with real transform data.
|
||||
let data = AffineTestData::new(n_elements as usize);
|
||||
let data_buf = runner
|
||||
.session
|
||||
|
@ -86,27 +86,26 @@ impl AffineTestData {
|
|||
fn new(n: usize) -> AffineTestData {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut a = Affine::default();
|
||||
let mut b;
|
||||
let mut input_data = Vec::with_capacity(n);
|
||||
let mut expected = Vec::with_capacity(n);
|
||||
for _ in 0..n {
|
||||
loop {
|
||||
b = Affine::new([
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
rng.gen_range(-10.0, 10.0),
|
||||
let b = Affine::new([
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
rng.gen_range(-3.0, 3.0),
|
||||
]);
|
||||
if b.determinant() >= 1.0 {
|
||||
if b.determinant().abs() >= 1.0 {
|
||||
expected.push(b);
|
||||
let c = a.inverse() * b;
|
||||
input_data.push(Transform::from_kurbo(c));
|
||||
a = b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
expected.push(b);
|
||||
let c = a.inverse() * b;
|
||||
input_data.push(Transform::from_kurbo(c));
|
||||
a = b;
|
||||
}
|
||||
AffineTestData {
|
||||
input_data,
|
||||
|
@ -123,7 +122,9 @@ impl AffineTestData {
|
|||
.zip(expected.as_coeffs())
|
||||
.map(|(actual, expected)| (actual - expected).powi(2))
|
||||
.sum();
|
||||
let tolerance = 1e-6 * (i + 1) as f64;
|
||||
// Hopefully this is right; most of the time the error is much
|
||||
// smaller, but occasionally we see outliers.
|
||||
let tolerance = 1e-9 * (i + 1) as f64;
|
||||
if error > tolerance {
|
||||
return Some(format!("{}: {} {}", i, error, tolerance));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue