1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 2 // 3 // Tests of the TokenLock class from lock.h 4 5 #include <stdlib.h> 6 7 #include "v8.h" 8 9 #include "platform.h" 10 #include "cctest.h" 11 12 13 using namespace ::v8::internal; 14 15 16 // Simple test of locking logic TEST(Simple)17TEST(Simple) { 18 Mutex* mutex = OS::CreateMutex(); 19 CHECK_EQ(0, mutex->Lock()); // acquire the lock with the right token 20 CHECK_EQ(0, mutex->Unlock()); // can unlock with the right token 21 delete mutex; 22 } 23 24 TEST(MultiLock)25TEST(MultiLock) { 26 Mutex* mutex = OS::CreateMutex(); 27 CHECK_EQ(0, mutex->Lock()); 28 CHECK_EQ(0, mutex->Unlock()); 29 delete mutex; 30 } 31 32 TEST(ShallowLock)33TEST(ShallowLock) { 34 Mutex* mutex = OS::CreateMutex(); 35 CHECK_EQ(0, mutex->Lock()); 36 CHECK_EQ(0, mutex->Unlock()); 37 CHECK_EQ(0, mutex->Lock()); 38 CHECK_EQ(0, mutex->Unlock()); 39 delete mutex; 40 } 41 42 TEST(SemaphoreTimeout)43TEST(SemaphoreTimeout) { 44 bool ok; 45 Semaphore* sem = OS::CreateSemaphore(0); 46 47 // Semaphore not signalled - timeout. 48 ok = sem->Wait(0); 49 CHECK(!ok); 50 ok = sem->Wait(100); 51 CHECK(!ok); 52 ok = sem->Wait(1000); 53 CHECK(!ok); 54 55 // Semaphore signalled - no timeout. 56 sem->Signal(); 57 ok = sem->Wait(0); 58 sem->Signal(); 59 ok = sem->Wait(100); 60 sem->Signal(); 61 ok = sem->Wait(1000); 62 CHECK(ok); 63 delete sem; 64 } 65