diff --git a/test/cas.c b/test/cas.c new file mode 100644 index 0000000..eae2e3d --- /dev/null +++ b/test/cas.c @@ -0,0 +1,23 @@ +#include "CAS.h" +#include + +int main() { + size_t x; + x=0; + assert((compare_and_swap(&x,1,2)==0 , x==0)); + assert((compare_and_swap(&x,0,2)==1 , x==2)); + + assert((atomic_add(&x,5) , x == 7)); + assert((atomic_add(&x,-5) , x == 2)); + + assert(atomic_add_return(&x,5) == 7); + assert(atomic_add_return(&x,-5) == 2); + + atomic_inc(&x); assert(x==3); + assert(atomic_inc_return(&x) == 4); + atomic_dec(&x); assert(x==3); + assert(atomic_dec_return(&x) == 2); + + assert((atomic_or(&x,1) , x==3)); + assert((atomic_and(&x,~1) , x==2)); +}