test/testatomic.c
changeset 5013 9d6b527e0912
parent 5006 8e8876e4aec6
child 5018 342b158efbbe
equal deleted inserted replaced
5012:2e282002bac3 5013:9d6b527e0912
    28 void RunBasicTest()
    28 void RunBasicTest()
    29 {
    29 {
    30     int value;
    30     int value;
    31     SDL_SpinLock lock = 0;
    31     SDL_SpinLock lock = 0;
    32 
    32 
       
    33     SDL_atomic_t v;
    33     SDL_bool tfret = SDL_FALSE;
    34     SDL_bool tfret = SDL_FALSE;
    34 
    35 
    35     printf("\nspin lock---------------------------------------\n\n");
    36     printf("\nspin lock---------------------------------------\n\n");
    36 
    37 
    37     SDL_AtomicLock(&lock);
    38     SDL_AtomicLock(&lock);
    38     printf("AtomicLock                   lock=%d\n", lock);
    39     printf("AtomicLock                   lock=%d\n", lock);
    39     SDL_AtomicUnlock(&lock);
    40     SDL_AtomicUnlock(&lock);
    40     printf("AtomicUnlock                 lock=%d\n", lock);
    41     printf("AtomicUnlock                 lock=%d\n", lock);
    41 
    42 
    42     printf("\natomic -----------------------------------------\n\n");
    43     printf("\natomic -----------------------------------------\n\n");
    43 
       
    44     SDL_atomic_t v;
       
    45      
    44      
    46     SDL_AtomicSet(&v, 0);
    45     SDL_AtomicSet(&v, 0);
    47     tfret = SDL_AtomicSet(&v, 10) == 0;
    46     tfret = SDL_AtomicSet(&v, 10) == 0;
    48     printf("AtomicSet(10)        tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    47     printf("AtomicSet(10)        tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    49     tfret = SDL_AtomicAdd(&v, 10) == 10;
    48     tfret = SDL_AtomicAdd(&v, 10) == 10;
    50     printf("AtomicAdd(10)        tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    49     printf("AtomicAdd(10)        tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    51 
    50 
    52     SDL_AtomicSet(&v, 0);
    51     SDL_AtomicSet(&v, 0);
    53     SDL_AtomicIncRef(&v);
    52     SDL_AtomicIncRef(&v);
    54     tfret = (SDL_AtomicGet(&v) == 1);
    53     tfret = (SDL_AtomicGet(&v) == 1);
    55     printf("AtomicIncRef()       tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    54     printf("AtomicIncRef()       tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    56     SDL_AtomicIncRef(&v);
    55     SDL_AtomicIncRef(&v);
    57     tfret = (SDL_AtomicGet(&v) == 2);
    56     tfret = (SDL_AtomicGet(&v) == 2);
    58     printf("AtomicIncRef()       tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    57     printf("AtomicIncRef()       tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    59     tfret = (SDL_AtomicDecRef(&v) == SDL_FALSE);
    58     tfret = (SDL_AtomicDecRef(&v) == SDL_FALSE);
    60     printf("AtomicDecRef()       tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    59     printf("AtomicDecRef()       tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    61     tfret = (SDL_AtomicDecRef(&v) == SDL_TRUE);
    60     tfret = (SDL_AtomicDecRef(&v) == SDL_TRUE);
    62     printf("AtomicDecRef()       tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    61     printf("AtomicDecRef()       tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    63 
    62 
    64     SDL_AtomicSet(&v, 10);
    63     SDL_AtomicSet(&v, 10);
    65     tfret = (SDL_AtomicCAS(&v, 0, 20) == SDL_FALSE);
    64     tfret = (SDL_AtomicCAS(&v, 0, 20) == SDL_FALSE);
    66     printf("AtomicCAS()          tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    65     printf("AtomicCAS()          tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    67     value = SDL_AtomicGet(&v);
    66     value = SDL_AtomicGet(&v);
    68     tfret = (SDL_AtomicCAS(&v, value, 20) == SDL_TRUE);
    67     tfret = (SDL_AtomicCAS(&v, value, 20) == SDL_TRUE);
    69     printf("AtomicCAS()          tfret=%s val=%"PRIu32"\n", tf(tfret), SDL_AtomicGet(&v));
    68     printf("AtomicCAS()          tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v));
    70 }
    69 }
    71 
    70 
    72 /* Atomic operation test, adapted from code by Michael Davidsaver at:
    71 /* Atomic operation test, adapted from code by Michael Davidsaver at:
    73     http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c
    72     http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c
    74 */
    73 */