Add initial support for python bindings
[alexxy/gromacs.git] / cmake / TestAtomics.c
1
2 #define TMPI_CHECK_ATOMICS
3 #include "thread_mpi/atomic.h"
4
5 int main(void)
6 {
7     int i;
8     void *ptr;
9     tMPI_Atomic_t some_atomic;
10     tMPI_Atomic_ptr_t *some_atomic_ptr = NULL;
11     tMPI_Spinlock_t some_spinlock;
12
13     /* Make the compiler actually emit code for these functions, so
14        that things like inability to emit inline assembly get
15        tested. It is not expected that the code below can run. */
16     tMPI_Atomic_memory_barrier();
17     tMPI_Atomic_memory_barrier_acq();
18     tMPI_Atomic_memory_barrier_rel();
19     i = tMPI_Atomic_get(&some_atomic);
20     tMPI_Atomic_set(&some_atomic, 0);
21     ptr = tMPI_Atomic_ptr_get(some_atomic_ptr);
22     tMPI_Atomic_ptr_set(some_atomic_ptr, ptr);
23     tMPI_Atomic_add_return(&some_atomic, 0);
24     tMPI_Atomic_fetch_add(&some_atomic, 0);
25     tMPI_Atomic_cas(&some_atomic, 0, 1);
26     tMPI_Atomic_ptr_cas(some_atomic_ptr, ptr, ptr);
27     tMPI_Atomic_swap(&some_atomic, 0);
28     tMPI_Atomic_ptr_swap(some_atomic_ptr, ptr);
29     tMPI_Spinlock_init(&some_spinlock);
30     tMPI_Spinlock_lock(&some_spinlock);
31     tMPI_Spinlock_trylock(&some_spinlock);
32     tMPI_Spinlock_unlock(&some_spinlock);
33     tMPI_Spinlock_islocked(&some_spinlock);
34     tMPI_Spinlock_wait(&some_spinlock);
35 return 0;
36 }