vrecpe: add tests with NaNs, 0, infinity, large values
diff --git a/ref_vrecpe.c b/ref_vrecpe.c
index 4bb9714..3023ab6 100644
--- a/ref_vrecpe.c
+++ b/ref_vrecpe.c
@@ -30,6 +30,7 @@
#endif
#include "stm-arm-neon-ref.h"
+#include <math.h>
#define TEST_MSG "VRECPE/VRECPEQ"
void exec_vrecpe(void)
@@ -94,4 +95,40 @@
DUMP(TEST_MSG, uint, 32, 4, PRIx32);
DUMP_FP(TEST_MSG, float, 32, 2, PRIx32);
DUMP_FP(TEST_MSG, float, 32, 4, PRIx32);
+
+ /* Test FP variants with special input values (NaN, infinity) */
+ TEST_VDUP(vector, , float, f, 32, 2, NAN);
+ TEST_VDUP(vector, q, float, f, 32, 4, HUGE_VALF);
+
+ /* Apply the operator */
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ fprintf (ref_file, "\n%s %s output:\n", TEST_MSG, " FP special (NaN, infinity)");
+ DUMP_FP(TEST_MSG, float, 32, 2, PRIx32);
+ DUMP_FP(TEST_MSG, float, 32, 4, PRIx32);
+
+ /* Test FP variants with special input values (zero, large value) */
+ TEST_VDUP(vector, , float, f, 32, 2, 0.0);
+ TEST_VDUP(vector, q, float, f, 32, 4, 9.0e37);
+
+ /* Apply the operator */
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ fprintf (ref_file, "\n%s %s output:\n", TEST_MSG, " FP special (zero, large value)");
+ DUMP_FP(TEST_MSG, float, 32, 2, PRIx32);
+ DUMP_FP(TEST_MSG, float, 32, 4, PRIx32);
+
+ /* Test FP variants with special input values (-0, -infinity) */
+ TEST_VDUP(vector, , float, f, 32, 2, -0.0);
+ TEST_VDUP(vector, q, float, f, 32, 4, -HUGE_VALF);
+
+ /* Apply the operator */
+ TEST_VRECPE(, float, f, 32, 2);
+ TEST_VRECPE(q, float, f, 32, 4);
+
+ fprintf (ref_file, "\n%s %s output:\n", TEST_MSG, " FP special (-0, -infinity)");
+ DUMP_FP(TEST_MSG, float, 32, 2, PRIx32);
+ DUMP_FP(TEST_MSG, float, 32, 4, PRIx32);
}