test/testatomic.c
changeset 3201 c297230efc75
parent 3199 3e1bf2b8bd81
child 3202 3aa519a5c676
equal deleted inserted replaced
3200:ef2c029a3a9d 3201:c297230efc75
     1 #include "SDL.h"
     1 #include "SDL.h"
       
     2 
       
     3 /*
       
     4   Absolutely basic test just to see if we get the expected value after
       
     5   calling each function.
       
     6 */
     2 
     7 
     3 int
     8 int
     4 main(int argc, char **argv)
     9 main(int argc, char **argv)
     5 {
    10 {
     6 /*     int rv = 10; */
       
     7 /*     volatile int atomic; */
       
     8 
    11 
     9 /*     SDL_atomic_int_set(&atomic, 10); */
    12    Uint32 val32 = 0;
    10 /*     if (SDL_atomic_int_get(&atomic) != 10) */
    13    Uint32 ret32 = 0;
    11 /*         printf("Error: "); */
       
    12 /*     printf("SDL_atomic_int_set(atomic, 10): atomic-> %d\n", */
       
    13 /*            SDL_atomic_int_get(&atomic)); */
       
    14 
    14 
    15 /*     SDL_atomic_int_add(&atomic, 10); */
    15    Uint64 val64 = 0;
    16 /*     if (SDL_atomic_int_get(&atomic) != 20) */
    16    Uint64 ret64 = 0;
    17 /*         printf("Error: "); */
       
    18 /*     printf("SDL_atomic_int_add(atomic, 10): atomic-> %d\n", */
       
    19 /*            SDL_atomic_int_get(&atomic)); */
       
    20 
    17 
    21 /*     rv = SDL_atomic_int_cmp_xchg(&atomic, 20, 30); */
    18    SDL_bool tfval = SDL_FALSE;
    22 /*     if (rv != SDL_TRUE || SDL_atomic_int_get(&atomic) != 30) */
       
    23 /*         printf("Error: "); */
       
    24 /*     printf("SDL_atomic_int_cmp_xchg(atomic, 20, 30): rv-> %d, atomic-> %d\n", */
       
    25 /*            rv, SDL_atomic_int_get(&atomic)); */
       
    26 
    19 
    27 /*     rv = SDL_atomic_int_cmp_xchg(&atomic, 20, 30); */
    20    ret32 = SDL_AtomicExchange32(&val32, 10);
    28 /*     if (rv != SDL_FALSE || SDL_atomic_int_get(&atomic) != 30) */
    21    tfval = SDL_AtomicCompareThenSet32(&val32, 10, 20);
    29 /*         printf("Error: "); */
    22    tfval = SDL_AtomicTestThenSet32(&val32);
    30 /*     printf("SDL_atomic_int_cmp_xchg(atomic, 20, 40): rv-> %d, atomic-> %d\n", */
    23    SDL_AtomicClear32(&val32);
    31 /*            rv, SDL_atomic_int_get(&atomic)); */
    24    ret32 = SDL_AtomicFetchThenIncrement32(&val32);
       
    25    ret32 = SDL_AtomicFetchThenDecrement32(&val32);
       
    26    ret32 = SDL_AtomicFetchThenAdd32(&val32, 10);
       
    27    ret32 = SDL_AtomicFetchThenSubtract32(&val32, 10);
       
    28    ret32 = SDL_AtomicIncrementThenFetch32(&val32);
       
    29    ret32 = SDL_AtomicDecrementThenFetch32(&val32);
       
    30    ret32 = SDL_AtomicAddThenFetch32(&val32, 10);
       
    31    ret32 = SDL_AtomicSubtractThenFetch32(&val32, 10);
    32 
    32 
    33 /*     rv = SDL_atomic_int_xchg_add(&atomic, 10); */
    33 /* #ifdef SDL_HAS_64BIT_TYPE */
    34 /*     if (rv != 30 || SDL_atomic_int_get(&atomic) != 40) */
    34 #if 0
    35 /*         printf("Error: "); */
       
    36 /*     printf("SDL_atomic_int_xchg_add(atomic, 10): rv-> %d, atomic-> %d\n", */
       
    37 /*            rv, SDL_atomic_int_get(&atomic)); */
       
    38 
    35 
    39 /*     SDL_atomic_int_inc(&atomic); */
    36    ret64 = SDL_AtomicExchange64(&val64, 10);
    40 /*     if (SDL_atomic_int_get(&atomic) != 41) */
    37    tfval = SDL_AtomicCompareThenSet64(&val64, 10, 20);
    41 /*         printf("Error: "); */
    38    tfval = SDL_AtomicTestThenSet64(&val64);
    42 /*     printf("SDL_atomic_int_inc(atomic): atomic-> %d\n", */
    39    SDL_AtomicClear64(&val64);
    43 /*            SDL_atomic_int_get(&atomic)); */
    40    ret64 = SDL_AtomicFetchThenIncrement64(&val64);
       
    41    ret64 = SDL_AtomicFetchThenDecrement64(&val64);
       
    42    ret64 = SDL_AtomicFetchThenAdd64(&val64, 10);
       
    43    ret64 = SDL_AtomicFetchThenSubtract64(&val64, 10);
       
    44    ret64 = SDL_AtomicIncrementThenFetch64(&val64);
       
    45    ret64 = SDL_AtomicDecrementThenFetch64(&val64);
       
    46    ret64 = SDL_AtomicAddThenFetch64(&val64, 10);
       
    47    ret64 = SDL_AtomicSubtractThenFetch64(&val64, 10);
       
    48 #endif
    44 
    49 
    45 /*     rv = SDL_atomic_int_dec_test(&atomic); */
    50    return 0;
    46 /*     if (rv != SDL_FALSE || SDL_atomic_int_get(&atomic) != 40) */
    51    }
    47 /*         printf("Error: "); */
       
    48 /*     printf("SDL_atomic_int_dec_test(atomic): rv-> %d, atomic-> %d\n", */
       
    49 /*            rv, SDL_atomic_int_get(&atomic)); */
       
    50 
       
    51 /*     SDL_atomic_int_set(&atomic, 1); */
       
    52 /*     if (SDL_atomic_int_get(&atomic) != 1) */
       
    53 /*         printf("Error: "); */
       
    54 /*     printf("SDL_atomic_int_set(atomic, 1): atomic-> %d\n", */
       
    55 /*            SDL_atomic_int_get(&atomic)); */
       
    56 
       
    57 /*     rv = SDL_atomic_int_dec_test(&atomic); */
       
    58 /*     if (rv != SDL_TRUE || SDL_atomic_int_get(&atomic) != 0) */
       
    59 /*         printf("Error: "); */
       
    60 /*     printf("SDL_atomic_int_dec_test(atomic): rv-> %d, atomic-> %d\n", */
       
    61 /*            rv, SDL_atomic_int_get(&atomic)); */
       
    62 
       
    63     return 0;
       
    64 }