x86: fixed testing equality of floating point numbers (#150)

* x86: fixed testing equality of floating point numbers

* x86: removed unused macro branch

* x86: marked assert_approx_eq as used only in tests
This commit is contained in:
Mrowqa 2017-10-25 15:57:35 +02:00 committed by Alex Crichton
parent ea51cbcf25
commit ae0688c7fa
3 changed files with 31 additions and 5 deletions

View file

@ -3224,7 +3224,10 @@ mod tests {
let r = avx::_mm256_rcp_ps(a);
let e = f32x8::new(0.99975586, 0.49987793, 0.33325195, 0.24993896,
0.19995117, 0.16662598, 0.14282227, 0.12496948);
assert_eq!(r, e);
let rel_err = 0.00048828125;
for i in 0..8 {
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
}
}
#[simd_test = "avx"]
@ -3233,7 +3236,10 @@ mod tests {
let r = avx::_mm256_rsqrt_ps(a);
let e = f32x8::new(0.99975586, 0.7069092, 0.5772705, 0.49987793,
0.44714355, 0.40820313, 0.3779297, 0.3534546);
assert_eq!(r, e);
let rel_err = 0.00048828125;
for i in 0..8 {
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
}
}
#[simd_test = "avx"]

View file

@ -338,4 +338,15 @@ macro_rules! constify_imm2 {
}
}
#[cfg(test)]
macro_rules! assert_approx_eq {
($a:expr, $b:expr, $eps:expr) => ({
let (a, b) = (&$a, &$b);
assert!((*a - *b).abs() < $eps,
"assertion failed: `(left !== right)` \
(left: `{:?}`, right: `{:?}`, expect diff: `{:?}`, real diff: `{:?}`)",
*a, *b, $eps, (*a - *b).abs());
})
}

View file

@ -1804,7 +1804,10 @@ mod tests {
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
let r = sse::_mm_rcp_ps(a);
let e = f32x4::new(0.24993896, 0.0769043, 0.06248474, 0.0099983215);
assert_eq!(r, e);
let rel_err = 0.00048828125;
for i in 0..4 {
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
}
}
#[simd_test = "sse"]
@ -1812,7 +1815,10 @@ mod tests {
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
let r = sse::_mm_rsqrt_ss(a);
let e = f32x4::new(0.49987793, 13.0, 16.0, 100.0);
assert_eq!(r, e);
let rel_err = 0.00048828125;
for i in 0..4 {
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
}
}
#[simd_test = "sse"]
@ -1820,7 +1826,10 @@ mod tests {
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
let r = sse::_mm_rsqrt_ps(a);
let e = f32x4::new(0.49987793, 0.2772827, 0.24993896, 0.099990845);
assert_eq!(r, e);
let rel_err = 0.00048828125;
for i in 0..4 {
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
}
}
#[simd_test = "sse"]