.
[kopensolaris-gnu/glibc.git] / csu / tst-atomic.c
index 727229e..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,8 +130,15 @@ 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)
+  if (atomic_increment_and_test (&mem)
       || mem != 1)
     {
       puts ("atomic_increment_and_test test 1 failed");
@@ -114,6 +153,14 @@ do_test (void)
       ret = 1;
     }
 
+  mem = -1;
+  if (! atomic_increment_and_test (&mem)
+      || mem != 0)
+    {
+      puts ("atomic_increment_and_test test 3 failed");
+      ret = 1;
+    }
+
   mem = 17;
   atomic_decrement (&mem);
   if (mem != 16)
@@ -122,8 +169,14 @@ 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)
+  if (atomic_decrement_and_test (&mem)
       || mem != -1)
     {
       puts ("atomic_decrement_and_test test 1 failed");
@@ -139,6 +192,14 @@ do_test (void)
     }
 
   mem = 1;
+  if (! atomic_decrement_and_test (&mem)
+      || mem != 0)
+    {
+      puts ("atomic_decrement_and_test test 3 failed");
+      ret = 1;
+    }
+
+  mem = 1;
   if (atomic_decrement_if_positive (&mem) != 1
       || mem != 0)
     {
@@ -162,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;
@@ -186,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)
@@ -194,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;
@@ -210,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)