maint: update copyright
[gnulib.git] / tests / test-copysign.c
index 60bda2f..e00bb56 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of copysign() function.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010-2014 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 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 ()
@@ -56,5 +60,52 @@ 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;
 }