summary refs log tree commit diff
path: root/math/libm-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'math/libm-test.c')
-rw-r--r--math/libm-test.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/math/libm-test.c b/math/libm-test.c
index c77cbee855..5d68b4953b 100644
--- a/math/libm-test.c
+++ b/math/libm-test.c
@@ -4813,6 +4813,50 @@ llround_test (void)
 
 
 static void
+fma_test (void)
+{
+  check ("fma(1.0, 2.0, 3.0) = 5.0", FUNC(fma) (1.0, 2.0, 3.0), 5.0);
+  check_isnan ("fma(NaN, 2.0, 3.0) = NaN", FUNC(fma) (nan_value, 2.0, 3.0));
+  check_isnan ("fma(1.0, NaN, 3.0) = NaN", FUNC(fma) (1.0, nan_value, 3.0));
+  check_isnan_maybe_exc ("fma(1.0, 2.0, NaN) = NaN",
+			 FUNC(fma) (1.0, 2.0, nan_value), INVALID_EXCEPTION);
+  check_isnan_maybe_exc ("fma(+Inf, 0.0, NaN) = NaN",
+			 FUNC(fma) (plus_infty, 0.0, nan_value),
+			 INVALID_EXCEPTION);
+  check_isnan_maybe_exc ("fma(-Inf, 0.0, NaN) = NaN",
+			 FUNC(fma) (minus_infty, 0.0, nan_value),
+			 INVALID_EXCEPTION);
+  check_isnan_maybe_exc ("fma(0.0, +Inf, NaN) = NaN",
+			 FUNC(fma) (0.0, plus_infty, nan_value),
+			 INVALID_EXCEPTION);
+  check_isnan_maybe_exc ("fma(0.0, -Inf, NaN) = NaN",
+			 FUNC(fma) (0.0, minus_infty, nan_value),
+			 INVALID_EXCEPTION);
+  check_isnan_exc ("fma(+Inf, 0.0, 1.0) = NaN",
+		   FUNC(fma) (plus_infty, 0.0, 1.0), INVALID_EXCEPTION);
+  check_isnan_exc ("fma(-Inf, 0.0, 1.0) = NaN",
+		   FUNC(fma) (minus_infty, 0.0, 1.0), INVALID_EXCEPTION);
+  check_isnan_exc ("fma(0.0, +Inf, 1.0) = NaN",
+		   FUNC(fma) (0.0, plus_infty, 1.0), INVALID_EXCEPTION);
+  check_isnan_exc ("fma(0.0, -Inf, 1.0) = NaN",
+		   FUNC(fma) (0.0, minus_infty, 1.0), INVALID_EXCEPTION);
+
+  check_isnan_exc ("fma(+Inf, +Inf, -Inf) = NaN",
+		   FUNC(fma) (plus_infty, plus_infty, minus_infty),
+		   INVALID_EXCEPTION);
+  check_isnan_exc ("fma(-Inf, +Inf, +Inf) = NaN",
+		   FUNC(fma) (minus_infty, plus_infty, plus_infty),
+		   INVALID_EXCEPTION);
+  check_isnan_exc ("fma(+Inf, -Inf, +Inf) = NaN",
+		   FUNC(fma) (plus_infty, minus_infty, plus_infty),
+		   INVALID_EXCEPTION);
+  check_isnan_exc ("fma(-Inf, -Inf, -Inf) = NaN",
+		   FUNC(fma) (minus_infty, minus_infty, minus_infty),
+		   INVALID_EXCEPTION);
+}
+
+
+static void
 inverse_func_pair_test (const char *test_name,
 			mathfunc f1, mathfunc inverse,
 			MATHTYPE x, MATHTYPE epsilon)
@@ -5205,6 +5249,7 @@ main (int argc, char *argv[])
   ctanh_test ();
   csqrt_test ();
   cpow_test ();
+  fma_test ();
 
   /* special tests */
   identities ();