+2010-11-05 Eric Blake <eblake@redhat.com>
+
+ copysign: enhance tests
+ * modules/copysign-tests (Files): Add minus-zero.h.
+ * tests/test-copysign.c (main): Also test zeros.
+
2010-11-04 Eric Blake <eblake@redhat.com>
ceil, floor, round, trunc: enhance tests of -0
SIGNATURE_CHECK (copysign, double, (double, double));
#include "macros.h"
+#include "minus-zero.h"
+
+#include <string.h>
volatile double x;
volatile double y;
double z;
+double zero = 0.0;
int
main ()
z = copysign (x, y);
ASSERT (z == -0.6);
+ /* From signed zero. */
+ x = 1.0;
+ y = 0.0;
+ z = copysign (x, y);
+ ASSERT (z == 1.0);
+
+ x = 1.0;
+ y = minus_zerod;
+ z = copysign (x, y);
+ /* Assume all gnulib targets support -0.0, until proven otherwise. */
+ ASSERT (z == -1.0);
+
+ x = -1.0;
+ y = 0.0;
+ z = copysign (x, y);
+ ASSERT (z == 1.0);
+
+ x = -1.0;
+ y = minus_zerod;
+ z = copysign (x, y);
+ ASSERT (z == -1.0);
+
+ /* To signed zero. */
+ x = 0.0;
+ y = 1.0;
+ z = copysign (x, y);
+ ASSERT (z == 0.0);
+ ASSERT (memcmp (&z, &zero, sizeof z) == 0);
+
+ x = 0.0;
+ y = -1.0;
+ z = copysign (x, y);
+ ASSERT (z == 0.0);
+ ASSERT (memcmp (&z, &zero, sizeof z) != 0);
+
+ x = minus_zerod;
+ y = 1.0;
+ z = copysign (x, y);
+ ASSERT (z == 0.0);
+ ASSERT (memcmp (&z, &zero, sizeof z) == 0);
+
+ x = minus_zerod;
+ y = -1.0;
+ z = copysign (x, y);
+ ASSERT (z == 0.0);
+ ASSERT (memcmp (&z, &zero, sizeof z) != 0);
+
return 0;
}