TestThreadSpinLock.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Copyright (c) Electronic Arts Inc. All rights reserved.
  3. ///////////////////////////////////////////////////////////////////////////////
  4. #include "TestThread.h"
  5. #include <EATest/EATest.h>
  6. #include <eathread/eathread_spinlock.h>
  7. using namespace EA::Thread;
  8. int TestThreadSpinLock()
  9. {
  10. int nErrorCount(0);
  11. { // SpinLock -- Basic single-threaded test.
  12. SpinLock spinLock;
  13. EATEST_VERIFY_MSG(!spinLock.IsLocked(), "SpinLock failure");
  14. spinLock.Lock();
  15. EATEST_VERIFY_MSG(spinLock.IsLocked(), "SpinLock failure");
  16. EATEST_VERIFY_MSG(!spinLock.TryLock(), "SpinLock failure");
  17. spinLock.Unlock();
  18. EATEST_VERIFY_MSG(!spinLock.IsLocked(), "SpinLock failure");
  19. EATEST_VERIFY_MSG(spinLock.TryLock(), "SpinLock failure");
  20. EATEST_VERIFY_MSG(spinLock.IsLocked(), "SpinLock failure");
  21. spinLock.Unlock();
  22. EATEST_VERIFY_MSG(!spinLock.IsLocked(), "SpinLock failure");
  23. }
  24. { // AutoSpinLock -- Basic single-threaded test.
  25. SpinLock spinLock;
  26. EATEST_VERIFY_MSG(!spinLock.IsLocked(), "AutoSpinLock failure");
  27. { //Special scope just for the AutoSpinLock
  28. AutoSpinLock autoSpinLock(spinLock);
  29. EATEST_VERIFY_MSG(spinLock.IsLocked(), "AutoSpinLock failure");
  30. }
  31. EATEST_VERIFY_MSG(!spinLock.IsLocked(), "AutoSpinLock failure");
  32. }
  33. #if EA_THREADS_AVAILABLE
  34. { // Multithreaded test
  35. // Implement this when we get the thread class working.
  36. // gTestLengthSeconds;
  37. }
  38. #endif
  39. return nErrorCount;
  40. }