non-nearest rounding ulp check
[libc-test] / src / common / mtest.h
index 9218a75..706c1ba 100644 (file)
@@ -102,16 +102,28 @@ float ulperrl(long double got, long double want, float dwant);
 static int checkexcept(int got, int want, int r)
 {
        if (r == RN)
+#if defined CHECK_INEXACT
+               return got == want;
+#elif defined CHECK_INEXACT_OMISSION
                return got == want || got == (want|INEXACT);
+#else
+               return (got|INEXACT) == (want|INEXACT);
+#endif
        return (got|INEXACT|UNDERFLOW) == (want|INEXACT|UNDERFLOW);
 }
 
+static int checkexceptall(int got, int want, int r)
+{
+       return got == want;
+}
+
 static int checkulp(float d, int r)
 {
        // TODO: we only care about >=1.5 ulp errors for now, should be 1.0
        if (r == RN)
                return fabsf(d) < 1.5;
-       return 1;
+       // accept larger error in non-nearest rounding mode
+       return fabsf(d) < 3.0;
 }
 
 static int checkcr(long double y, long double ywant, int r)