| Index: test/base-unittests/platform/mutex-unittest.cc
 | 
| diff --git a/test/base-unittests/platform/mutex-unittest.cc b/test/base-unittests/platform/mutex-unittest.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..5af5efb5a9d68d3c6a46c4dde391bdff43ddc8b0
 | 
| --- /dev/null
 | 
| +++ b/test/base-unittests/platform/mutex-unittest.cc
 | 
| @@ -0,0 +1,91 @@
 | 
| +// Copyright 2014 the V8 project authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#include "src/base/platform/mutex.h"
 | 
| +
 | 
| +#include "testing/gtest/include/gtest/gtest.h"
 | 
| +
 | 
| +namespace v8 {
 | 
| +namespace base {
 | 
| +
 | 
| +TEST(Mutex, LockGuardMutex) {
 | 
| +  Mutex mutex;
 | 
| +  { LockGuard<Mutex> lock_guard(&mutex); }
 | 
| +  { LockGuard<Mutex> lock_guard(&mutex); }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +TEST(Mutex, LockGuardRecursiveMutex) {
 | 
| +  RecursiveMutex recursive_mutex;
 | 
| +  { LockGuard<RecursiveMutex> lock_guard(&recursive_mutex); }
 | 
| +  {
 | 
| +    LockGuard<RecursiveMutex> lock_guard1(&recursive_mutex);
 | 
| +    LockGuard<RecursiveMutex> lock_guard2(&recursive_mutex);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +TEST(Mutex, LockGuardLazyMutex) {
 | 
| +  LazyMutex lazy_mutex = LAZY_MUTEX_INITIALIZER;
 | 
| +  { LockGuard<Mutex> lock_guard(lazy_mutex.Pointer()); }
 | 
| +  { LockGuard<Mutex> lock_guard(lazy_mutex.Pointer()); }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +TEST(Mutex, LockGuardLazyRecursiveMutex) {
 | 
| +  LazyRecursiveMutex lazy_recursive_mutex = LAZY_RECURSIVE_MUTEX_INITIALIZER;
 | 
| +  { LockGuard<RecursiveMutex> lock_guard(lazy_recursive_mutex.Pointer()); }
 | 
| +  {
 | 
| +    LockGuard<RecursiveMutex> lock_guard1(lazy_recursive_mutex.Pointer());
 | 
| +    LockGuard<RecursiveMutex> lock_guard2(lazy_recursive_mutex.Pointer());
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +TEST(Mutex, MultipleMutexes) {
 | 
| +  Mutex mutex1;
 | 
| +  Mutex mutex2;
 | 
| +  Mutex mutex3;
 | 
| +  // Order 1
 | 
| +  mutex1.Lock();
 | 
| +  mutex2.Lock();
 | 
| +  mutex3.Lock();
 | 
| +  mutex1.Unlock();
 | 
| +  mutex2.Unlock();
 | 
| +  mutex3.Unlock();
 | 
| +  // Order 2
 | 
| +  mutex1.Lock();
 | 
| +  mutex2.Lock();
 | 
| +  mutex3.Lock();
 | 
| +  mutex3.Unlock();
 | 
| +  mutex2.Unlock();
 | 
| +  mutex1.Unlock();
 | 
| +}
 | 
| +
 | 
| +
 | 
| +TEST(Mutex, MultipleRecursiveMutexes) {
 | 
| +  RecursiveMutex recursive_mutex1;
 | 
| +  RecursiveMutex recursive_mutex2;
 | 
| +  // Order 1
 | 
| +  recursive_mutex1.Lock();
 | 
| +  recursive_mutex2.Lock();
 | 
| +  EXPECT_TRUE(recursive_mutex1.TryLock());
 | 
| +  EXPECT_TRUE(recursive_mutex2.TryLock());
 | 
| +  recursive_mutex1.Unlock();
 | 
| +  recursive_mutex1.Unlock();
 | 
| +  recursive_mutex2.Unlock();
 | 
| +  recursive_mutex2.Unlock();
 | 
| +  // Order 2
 | 
| +  recursive_mutex1.Lock();
 | 
| +  EXPECT_TRUE(recursive_mutex1.TryLock());
 | 
| +  recursive_mutex2.Lock();
 | 
| +  EXPECT_TRUE(recursive_mutex2.TryLock());
 | 
| +  recursive_mutex2.Unlock();
 | 
| +  recursive_mutex1.Unlock();
 | 
| +  recursive_mutex2.Unlock();
 | 
| +  recursive_mutex1.Unlock();
 | 
| +}
 | 
| +
 | 
| +}  // namespace base
 | 
| +}  // namespace v8
 | 
| 
 |