Changes imported from Abseil "staging" branch:
- f59c2332341d6b1a3e045d61eb0065f7a226f807 Avoid preprocessing '__CUDACC_VER__ >= 70000' on CUDA 9,... by Abseil Team <absl-team@google.com> - 12dd22cf967603e9a12d58abfe877989d61844e3 Internal change. by Greg Falcon <gfalcon@google.com> GitOrigin-RevId: f59c2332341d6b1a3e045d61eb0065f7a226f807 Change-Id: If4f5274e6d638a2ac86f1377e6ac0481dc584f19
This commit is contained in:
parent
6280bddf55
commit
4972c72c5c
13 changed files with 70 additions and 21 deletions
|
@ -69,8 +69,22 @@ void ThreadTwo(absl::Mutex* mutex, absl::CondVar* condvar,
|
|||
}
|
||||
|
||||
// Launch thread 1 and thread 2, and block on their completion.
|
||||
// If any of 'mutex', 'condvar', or 'notification' is nullptr, use a locally
|
||||
// constructed instance instead.
|
||||
void RunTests(absl::Mutex* mutex, absl::CondVar* condvar,
|
||||
absl::Notification* notification) {
|
||||
absl::Mutex default_mutex;
|
||||
absl::CondVar default_condvar;
|
||||
absl::Notification default_notification;
|
||||
if (!mutex) {
|
||||
mutex = &default_mutex;
|
||||
}
|
||||
if (!condvar) {
|
||||
condvar = &default_condvar;
|
||||
}
|
||||
if (!notification) {
|
||||
notification = &default_notification;
|
||||
}
|
||||
bool state = false;
|
||||
std::thread thread_one(ThreadOne, mutex, condvar, notification, &state);
|
||||
std::thread thread_two(ThreadTwo, mutex, condvar, notification, &state);
|
||||
|
@ -85,6 +99,33 @@ void TestLocals() {
|
|||
RunTests(&mutex, &condvar, ¬ification);
|
||||
}
|
||||
|
||||
// Global variables during start and termination
|
||||
//
|
||||
// In a translation unit, static storage duration variables are initialized in
|
||||
// the order of their definitions, and destroyed in the reverse order of their
|
||||
// definitions. We can use this to arrange for tests to be run on these objects
|
||||
// before they are created, and after they are destroyed.
|
||||
|
||||
class ConstructorTestRunner {
|
||||
public:
|
||||
ConstructorTestRunner(absl::Mutex* mutex, absl::CondVar* condvar,
|
||||
absl::Notification* notification) {
|
||||
RunTests(mutex, condvar, notification);
|
||||
}
|
||||
};
|
||||
|
||||
class DestructorTestRunner {
|
||||
public:
|
||||
DestructorTestRunner(absl::Mutex* mutex, absl::CondVar* condvar,
|
||||
absl::Notification* notification)
|
||||
: mutex_(mutex), condvar_(condvar), notification_(notification) {}
|
||||
~DestructorTestRunner() { RunTests(mutex_, condvar_, notification_); }
|
||||
private:
|
||||
absl::Mutex* mutex_;
|
||||
absl::CondVar* condvar_;
|
||||
absl::Notification* notification_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
int main() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue