Files
swift-mirror/unittests/Threading/Mutex.cpp
Alastair Houghton 785f4a215c [Unittests] Add more threading library tests.
Added explicit tests for `swift::once` and also for the ulock implementation
used on Linux.

rdar://90776105
2022-06-07 07:39:51 +01:00

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);
}