diff options
author | Vincent Ambo <mail@tazj.in> | 2022-02-07T23·05+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-02-07T23·09+0000 |
commit | 5aa5d282eac56a21e74611c1cdbaa97bb5db2dca (patch) | |
tree | 8cc5dce8157a1470ff76719dd15d65f648a05522 /third_party/abseil_cpp/absl/base/call_once_test.cc | |
parent | a25675804c4f429fab5ee5201fe25e89865dfd13 (diff) |
chore(3p/abseil_cpp): unvendor abseil_cpp r/3786
we weren't actually using these sources anymore, okay? Change-Id: If701571d9716de308d3512e1eb22c35db0877a66 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5248 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Autosubmit: tazjin <tazjin@tvl.su>
Diffstat (limited to 'third_party/abseil_cpp/absl/base/call_once_test.cc')
-rw-r--r-- | third_party/abseil_cpp/absl/base/call_once_test.cc | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/third_party/abseil_cpp/absl/base/call_once_test.cc b/third_party/abseil_cpp/absl/base/call_once_test.cc deleted file mode 100644 index 11d26c44d1a4..000000000000 --- a/third_party/abseil_cpp/absl/base/call_once_test.cc +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/base/call_once.h" - -#include <thread> -#include <vector> - -#include "gtest/gtest.h" -#include "absl/base/attributes.h" -#include "absl/base/const_init.h" -#include "absl/base/thread_annotations.h" -#include "absl/synchronization/mutex.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace { - -absl::once_flag once; - -ABSL_CONST_INIT Mutex counters_mu(absl::kConstInit); - -int running_thread_count ABSL_GUARDED_BY(counters_mu) = 0; -int call_once_invoke_count ABSL_GUARDED_BY(counters_mu) = 0; -int call_once_finished_count ABSL_GUARDED_BY(counters_mu) = 0; -int call_once_return_count ABSL_GUARDED_BY(counters_mu) = 0; -bool done_blocking ABSL_GUARDED_BY(counters_mu) = false; - -// Function to be called from absl::call_once. Waits for a notification. -void WaitAndIncrement() { - counters_mu.Lock(); - ++call_once_invoke_count; - counters_mu.Unlock(); - - counters_mu.LockWhen(Condition(&done_blocking)); - ++call_once_finished_count; - counters_mu.Unlock(); -} - -void ThreadBody() { - counters_mu.Lock(); - ++running_thread_count; - counters_mu.Unlock(); - - absl::call_once(once, WaitAndIncrement); - - counters_mu.Lock(); - ++call_once_return_count; - counters_mu.Unlock(); -} - -// Returns true if all threads are set up for the test. -bool ThreadsAreSetup(void*) ABSL_EXCLUSIVE_LOCKS_REQUIRED(counters_mu) { - // All ten threads must be running, and WaitAndIncrement should be blocked. - return running_thread_count == 10 && call_once_invoke_count == 1; -} - -TEST(CallOnceTest, ExecutionCount) { - std::vector<std::thread> threads; - - // Start 10 threads all calling call_once on the same once_flag. - for (int i = 0; i < 10; ++i) { - threads.emplace_back(ThreadBody); - } - - - // Wait until all ten threads have started, and WaitAndIncrement has been - // invoked. - counters_mu.LockWhen(Condition(ThreadsAreSetup, nullptr)); - - // WaitAndIncrement should have been invoked by exactly one call_once() - // instance. That thread should be blocking on a notification, and all other - // call_once instances should be blocking as well. - EXPECT_EQ(call_once_invoke_count, 1); - EXPECT_EQ(call_once_finished_count, 0); - EXPECT_EQ(call_once_return_count, 0); - - // Allow WaitAndIncrement to finish executing. Once it does, the other - // call_once waiters will be unblocked. - done_blocking = true; - counters_mu.Unlock(); - - for (std::thread& thread : threads) { - thread.join(); - } - - counters_mu.Lock(); - EXPECT_EQ(call_once_invoke_count, 1); - EXPECT_EQ(call_once_finished_count, 1); - EXPECT_EQ(call_once_return_count, 10); - counters_mu.Unlock(); -} - -} // namespace -ABSL_NAMESPACE_END -} // namespace absl |