Mercurial > sdl-ios-xcode
view test/testatomic.c @ 3261:72b542f34739
The new, cleaner, version of the atomic operations. The dummy code is what you should start working with to port atomic ops.
The linux code appears to be complete and *should* be the base of all Unix and GCC based versions. The macosx and win32 versions
are currently just copies of the dummy code. I will begin working on the windows version as soon as this check in is done. I
need someone to work on the Mac OS X version.
I'm afraid that this check in will break QNX (Sorry!)
author | Bob Pendleton <bob@pendleton.com> |
---|---|
date | Thu, 17 Sep 2009 20:35:12 +0000 |
parents | 916f396fe65d |
children | 975fd903466b |
line wrap: on
line source
#include "SDL.h" /* Absolutely basic tests just to see if we get the expected value after calling each function. */ char * tf(SDL_bool tf) { static char *t = "true"; static char *f = "false"; if (tf) { return t; } return f; } int main(int argc, char **argv) { volatile Uint32 val32 = 0; Uint32 ret32 = 0; volatile Uint64 val64 = 0; Uint64 ret64 = 0; SDL_SpinLock lock = 0; SDL_bool tfret = SDL_FALSE; printf("\nspin lock---------------------------------------\n\n"); SDL_AtomicLock(&lock); printf("AtomicLock lock=%d\n", lock); SDL_AtomicUnlock(&lock); printf("AtomicUnlock lock=%d\n", lock); printf("\n32 bit -----------------------------------------\n\n"); val32 = 0; tfret = SDL_AtomicTestThenSet32(&val32); printf("TestThenSet32 tfret=%s val=%d\n", tf(tfret), val32); tfret = SDL_AtomicTestThenSet32(&val32); printf("TestThenSet32 tfret=%s val=%d\n", tf(tfret), val32); SDL_AtomicClear32(&val32); printf("Clear32 val=%d\n", val32); ret32 = SDL_AtomicFetchThenIncrement32(&val32); printf("FetchThenIncrement32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicFetchThenDecrement32(&val32); printf("FetchThenDecrement32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicFetchThenAdd32(&val32, 10); printf("FetchThenAdd32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicFetchThenSubtract32(&val32, 10); printf("FetchThenSubtract32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicIncrementThenFetch32(&val32); printf("IncrementThenFetch32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicDecrementThenFetch32(&val32); printf("DecrementThenFetch32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicAddThenFetch32(&val32, 10); printf("AddThenFetch32 ret=%d val=%d\n", ret32, val32); ret32 = SDL_AtomicSubtractThenFetch32(&val32, 10); printf("SubtractThenFetch32 ret=%d val=%d\n", ret32, val32); #ifdef SDL_HAS_64BIT_TYPE printf("\n64 bit -----------------------------------------\n\n"); val64 = 0; tfret = SDL_AtomicTestThenSet64(&val64); printf("TestThenSet64 tfret=%s val=%lld\n", tf(tfret), val64); tfret = SDL_AtomicTestThenSet64(&val64); printf("TestThenSet64 tfret=%s val=%lld\n", tf(tfret), val64); SDL_AtomicClear64(&val64); printf("Clear64 val=%lld\n", val64); ret64 = SDL_AtomicFetchThenIncrement64(&val64); printf("FetchThenIncrement64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicFetchThenDecrement64(&val64); printf("FetchThenDecrement64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicFetchThenAdd64(&val64, 10); printf("FetchThenAdd64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicFetchThenSubtract64(&val64, 10); printf("FetchThenSubtract64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicIncrementThenFetch64(&val64); printf("IncrementThenFetch64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicDecrementThenFetch64(&val64); printf("DecrementThenFetch64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicAddThenFetch64(&val64, 10); printf("AddThenFetch64 ret=%lld val=%lld\n", ret64, val64); ret64 = SDL_AtomicSubtractThenFetch64(&val64, 10); printf("SubtractThenFetch64 ret=%lld val=%lld\n", ret64, val64); #endif return 0; }