.
[kopensolaris-gnu/glibc.git] / csu / tst-atomic.c
index 292f6e7..7a2e3d0 100644 (file)
@@ -1,5 +1,5 @@
 /* Tests for atomic.h macros.
-   Copyright (C) 2003 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -48,6 +48,22 @@ do_test (void)
       puts ("atomic_compare_and_exchange_val_acq test 2 failed");
       ret = 1;
     }
+
+  mem = -15;
+  if (atomic_compare_and_exchange_val_acq (&mem, -56, -15) != -15
+      || mem != -56)
+    {
+      puts ("atomic_compare_and_exchange_val_acq test 3 failed");
+      ret = 1;
+    }
+
+  mem = -1;
+  if (atomic_compare_and_exchange_val_acq (&mem, 17, 0) != -1
+      || mem != -1)
+    {
+      puts ("atomic_compare_and_exchange_val_acq test 4 failed");
+      ret = 1;
+    }
 #endif
 
   mem = 24;
@@ -66,11 +82,27 @@ do_test (void)
       ret = 1;
     }
 
+  mem = -15;
+  if (atomic_compare_and_exchange_bool_acq (&mem, -56, -15)
+      || mem != -56)
+    {
+      puts ("atomic_compare_and_exchange_bool_acq test 3 failed");
+      ret = 1;
+    }
+
+  mem = -1;
+  if (! atomic_compare_and_exchange_bool_acq (&mem, 17, 0)
+      || mem != -1)
+    {
+      puts ("atomic_compare_and_exchange_bool_acq test 4 failed");
+      ret = 1;
+    }
+
   mem = 64;
-  if (atomic_exchange (&mem, 31) != 64
+  if (atomic_exchange_acq (&mem, 31) != 64
       || mem != 31)
     {
-      puts ("atomic_exchange test failed");
+      puts ("atomic_exchange_acq test failed");
       ret = 1;
     }
 
@@ -98,6 +130,13 @@ do_test (void)
       ret = 1;
     }
 
+  mem = 2;
+  if (atomic_increment_val (&mem) != 3)
+    {
+      puts ("atomic_increment_val test failed");
+      ret = 1;
+    }
+
   mem = 0;
   if (atomic_increment_and_test (&mem)
       || mem != 1)
@@ -130,6 +169,12 @@ do_test (void)
       ret = 1;
     }
 
+  if (atomic_decrement_val (&mem) != 15)
+    {
+      puts ("atomic_decrement_val test failed");
+      ret = 1;
+    }
+
   mem = 0;
   if (atomic_decrement_and_test (&mem)
       || mem != -1)
@@ -150,7 +195,7 @@ do_test (void)
   if (! atomic_decrement_and_test (&mem)
       || mem != 0)
     {
-      puts ("atomic_decrement_and_test test 1 failed");
+      puts ("atomic_decrement_and_test test 3 failed");
       ret = 1;
     }
 
@@ -178,9 +223,9 @@ do_test (void)
       ret = 1;
     }
 
-  mem = -10;
-  if (! atomic_add_negative (&mem, 12)
-      || mem != 2)
+  mem = -12;
+  if (! atomic_add_negative (&mem, 10)
+      || mem != -2)
     {
       puts ("atomic_add_negative test 1 failed");
       ret = 1;
@@ -202,6 +247,30 @@ do_test (void)
       ret = 1;
     }
 
+  mem = -12;
+  if (atomic_add_negative (&mem, 14)
+      || mem != 2)
+    {
+      puts ("atomic_add_negative test 4 failed");
+      ret = 1;
+    }
+
+  mem = 0;
+  if (! atomic_add_negative (&mem, -1)
+      || mem != -1)
+    {
+      puts ("atomic_add_negative test 5 failed");
+      ret = 1;
+    }
+
+  mem = -31;
+  if (atomic_add_negative (&mem, 31)
+      || mem != 0)
+    {
+      puts ("atomic_add_negative test 6 failed");
+      ret = 1;
+    }
+
   mem = -34;
   if (atomic_add_zero (&mem, 31)
       || mem != -3)
@@ -210,9 +279,9 @@ do_test (void)
       ret = 1;
     }
 
-  mem = 0;
+  mem = -36;
   if (! atomic_add_zero (&mem, 36)
-      || mem != 36)
+      || mem != 0)
     {
       puts ("atomic_add_zero test 2 failed");
       ret = 1;
@@ -226,6 +295,30 @@ do_test (void)
       ret = 1;
     }
 
+  mem = -18;
+  if (atomic_add_zero (&mem, 20)
+      || mem != 2)
+    {
+      puts ("atomic_add_zero test 4 failed");
+      ret = 1;
+    }
+
+  mem = 10;
+  if (atomic_add_zero (&mem, -20)
+      || mem != -10)
+    {
+      puts ("atomic_add_zero test 5 failed");
+      ret = 1;
+    }
+
+  mem = 10;
+  if (! atomic_add_zero (&mem, -10)
+      || mem != 0)
+    {
+      puts ("atomic_add_zero test 6 failed");
+      ret = 1;
+    }
+
   mem = 0;
   atomic_bit_set (&mem, 1);
   if (mem != 2)