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