mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Added explicit tests for `swift::once` and also for the ulock implementation used on Linux. rdar://90776105
143 lines
3.4 KiB
C++
143 lines
3.4 KiB
C++
//===--- Mutex.cpp - Mutex Tests ------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "swift/Threading/Mutex.h"
|
|
#include "gtest/gtest.h"
|
|
#include <atomic>
|
|
#include <chrono>
|
|
#include <map>
|
|
#include <random>
|
|
|
|
#include "LockingHelpers.h"
|
|
|
|
using namespace swift;
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
TEST(MutexTest, BasicLockable) {
|
|
Mutex mutex(/* checked = */ true);
|
|
basicLockable(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, BasicLockable) {
|
|
static LazyMutex mutex;
|
|
basicLockable(mutex);
|
|
}
|
|
|
|
TEST(LazyUnsafeMutexTest, BasicLockable) {
|
|
static LazyUnsafeMutex mutex;
|
|
basicLockable(mutex);
|
|
}
|
|
|
|
TEST(SmallMutex, BasicLockable) {
|
|
SmallMutex mutex;
|
|
basicLockable(mutex);
|
|
}
|
|
|
|
TEST(MutexTest, TryLockable) {
|
|
Mutex mutex(/* checked = */ true);
|
|
tryLockable(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, TryLockable) {
|
|
static LazyMutex mutex;
|
|
tryLockable(mutex);
|
|
}
|
|
|
|
TEST(LazyUnsafeMutexTest, TryLockable) {
|
|
static LazyUnsafeMutex mutex;
|
|
tryLockable(mutex);
|
|
}
|
|
|
|
TEST(SmallMutex, TryLockable) {
|
|
SmallMutex mutex;
|
|
tryLockable(mutex);
|
|
}
|
|
|
|
TEST(MutexTest, BasicLockableThreaded) {
|
|
Mutex mutex(/* checked = */ true);
|
|
basicLockableThreaded(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, BasicLockableThreaded) {
|
|
static LazyMutex mutex;
|
|
basicLockableThreaded(mutex);
|
|
}
|
|
|
|
TEST(LazyUnsafeMutexTest, BasicLockableThreaded) {
|
|
static LazyUnsafeMutex mutex;
|
|
basicLockableThreaded(mutex);
|
|
}
|
|
|
|
TEST(SmallMutex, BasicLockableThreaded) {
|
|
SmallMutex mutex;
|
|
basicLockableThreaded(mutex);
|
|
}
|
|
|
|
TEST(MutexTest, LockableThreaded) {
|
|
Mutex mutex(/* checked = */ true);
|
|
lockableThreaded(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, LockableThreaded) {
|
|
static LazyMutex Mutex;
|
|
lockableThreaded(Mutex);
|
|
}
|
|
|
|
TEST(SmallMutexTest, LockableThreaded) {
|
|
SmallMutex Mutex;
|
|
lockableThreaded(Mutex);
|
|
}
|
|
|
|
TEST(MutexTest, ScopedLockThreaded) {
|
|
Mutex mutex(/* checked = */ true);
|
|
scopedLockThreaded<Mutex::ScopedLock>(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, ScopedLockThreaded) {
|
|
static LazyMutex Mutex;
|
|
scopedLockThreaded<LazyMutex::ScopedLock>(Mutex);
|
|
}
|
|
|
|
TEST(SmallMutexTest, ScopedLockThreaded) {
|
|
SmallMutex mutex(/* checked = */ true);
|
|
scopedLockThreaded<ScopedLockT<SmallMutex, false>>(mutex);
|
|
}
|
|
|
|
TEST(MutexTest, ScopedUnlockUnderScopedLockThreaded) {
|
|
Mutex mutex(/* checked = */ true);
|
|
scopedUnlockUnderScopedLockThreaded<Mutex::ScopedLock, Mutex::ScopedUnlock>(
|
|
mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, ScopedUnlockUnderScopedLockThreaded) {
|
|
static LazyMutex Mutex;
|
|
scopedUnlockUnderScopedLockThreaded<LazyMutex::ScopedLock,
|
|
LazyMutex::ScopedUnlock>(Mutex);
|
|
}
|
|
|
|
TEST(SmallMutexTest, ScopedUnlockUnderScopedLockThreaded) {
|
|
SmallMutex mutex(/* checked = */ true);
|
|
scopedUnlockUnderScopedLockThreaded<SmallMutex::ScopedLock,
|
|
SmallMutex::ScopedUnlock>(mutex);
|
|
}
|
|
|
|
TEST(MutexTest, CriticalSectionThreaded) {
|
|
Mutex mutex(/* checked = */ true);
|
|
criticalSectionThreaded(mutex);
|
|
}
|
|
|
|
TEST(LazyMutexTest, CriticalSectionThreaded) {
|
|
static LazyMutex Mutex;
|
|
criticalSectionThreaded(Mutex);
|
|
}
|