• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)17 TEST(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)25 TEST(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)33 TEST(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)43 TEST(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