This fails sin/cos/tan tests almost everywhere. Signed-off-by: Jan Vesely <jano.ves...@gmail.com> --- tests/util/piglit-util-cl.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/tests/util/piglit-util-cl.c b/tests/util/piglit-util-cl.c index 0211c1ff6..0cbc450ad 100644 --- a/tests/util/piglit-util-cl.c +++ b/tests/util/piglit-util-cl.c @@ -89,21 +89,27 @@ piglit_cl_probe_floating(float value, float expect, uint32_t ulp) union { float f; uint32_t u; - } v, e, t; + } v, e; v.f = value; e.f = expect; - t.u = ulp; - /* Treat infinity and nan seperately */ + + /* Treat infinity and nan separately */ if (probe_float_check_nan_inf(value, expect)) { return true; } + /* expect is correctly rounded, 1 ULP is the distance to next + * representable value */ + float direction = signbit(expect) ? -INFINITY : INFINITY; + float one_ulp = nextafterf(expect, direction) - expect; + float tolerance = fabsf(ulp * one_ulp); + diff = fabsf(value - expect); - if(diff > ulp || isnan(value)) { + if (diff > tolerance || isnan(value)) { printf("Expecting %f (0x%x) with tolerance %f (%u ulps), but got %f (0x%x)\n", - e.f, e.u, t.f, t.u, v.f, v.u); + e.f, e.u, tolerance, ulp, v.f, v.u); return false; } @@ -117,21 +123,25 @@ piglit_cl_probe_double(double value, double expect, uint64_t ulp) union { double f; uint64_t u; - } v, e, t; + } v, e; v.f = value; e.f = expect; - t.u = ulp; - /* Treat infinity and nan seperately */ + + /* Treat infinity and nan separately */ if (probe_float_check_nan_inf(value, expect)) { return true; } - diff = fabsl(value - expect); + double direction = signbit(expect) ? -INFINITY : INFINITY; + double one_ulp = nextafter(expect, direction) - expect; + double tolerance = fabs(ulp * one_ulp); + + diff = fabs(value - expect); - if(diff > ulp || isnan(value)) { + if(diff > tolerance || isnan(value)) { printf("Expecting %f (0x%" PRIx64") with tolerance %f (%lu ulps), but got %f (0x%" PRIx64")\n", - e.f, e.u, t.f, t.u, v.f, v.u); + e.f, e.u, tolerance, ulp, v.f, v.u); return false; } -- 2.13.6 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit