aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2019-12-11 11:15:11 +0200
committerMartin Storsjö <martin@martin.st>2019-12-12 23:57:08 +0200
commitf58bda642d6d95ffafd6297ca909c7dcc4e0b0e5 (patch)
treeaa0538909d8307b7445ff8430e75861874bdc469
parent9d1f7870a9deb3c484ce5c7f10ae990f9ed601b6 (diff)
downloadffmpeg-f58bda642d6d95ffafd6297ca909c7dcc4e0b0e5.tar.gz
checkasm: af_afir: Use a dynamic tolerance depending on values
As the values generated by av_bmg_get can be arbitrarily large (only the stddev is specified), we can't use a fixed tolerance. Calculate a dynamic tolerance (like in float_dsp from 38f966b2222db), based on the individual steps of the calculation. This fixes running this test with certain seeds, when built with clang for mingw/x86_32. Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--tests/checkasm/af_afir.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/checkasm/af_afir.c b/tests/checkasm/af_afir.c
index e3fb76e8e0..8d1f815469 100644
--- a/tests/checkasm/af_afir.c
+++ b/tests/checkasm/af_afir.c
@@ -53,7 +53,19 @@ static void test_fcmul_add(const float *src0, const float *src1, const float *sr
call_ref(cdst, src1, src2, LEN);
call_new(odst, src1, src2, LEN);
for (i = 0; i <= LEN*2; i++) {
- if (!float_near_abs_eps(cdst[i], odst[i], 6.2e-05)) {
+ int idx = i & ~1;
+ float cre = src2[idx];
+ float cim = src2[idx + 1];
+ float tre = src1[idx];
+ float tim = src1[idx + 1];
+ double t = fabs(src0[i]) +
+ fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) +
+ fabs(tre * cre) + fabs(tim * cim) +
+ fabs(tre * cim) + fabs(tim * cre) +
+ fabs(tre * cre - tim * cim) +
+ fabs(tre * cim + tim * cre) +
+ fabs(cdst[i]) + 1.0;
+ if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
i, cdst[i], odst[i], cdst[i] - odst[i]);
fail();