aboutsummaryrefslogtreecommitdiff
path: root/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc')
-rw-r--r--third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc149
1 files changed, 0 insertions, 149 deletions
diff --git a/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc b/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc
deleted file mode 100644
index 350623c1f3..0000000000
--- a/third_party/abseil-cpp/absl/strings/internal/cordz_functions_test.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2019 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/strings/internal/cordz_functions.h"
-
-#include <thread> // NOLINT we need real clean new threads
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "absl/base/config.h"
-
-namespace absl {
-ABSL_NAMESPACE_BEGIN
-namespace cord_internal {
-namespace {
-
-using ::testing::Eq;
-using ::testing::Ge;
-using ::testing::Le;
-
-TEST(CordzFunctionsTest, SampleRate) {
- int32_t orig_sample_rate = get_cordz_mean_interval();
- int32_t expected_sample_rate = 123;
- set_cordz_mean_interval(expected_sample_rate);
- EXPECT_THAT(get_cordz_mean_interval(), Eq(expected_sample_rate));
- set_cordz_mean_interval(orig_sample_rate);
-}
-
-// Cordz is disabled when we don't have thread_local. All calls to
-// should_profile will return false when cordz is diabled, so we might want to
-// avoid those tests.
-#ifdef ABSL_INTERNAL_CORDZ_ENABLED
-
-TEST(CordzFunctionsTest, ShouldProfileDisable) {
- int32_t orig_sample_rate = get_cordz_mean_interval();
-
- set_cordz_mean_interval(0);
- cordz_set_next_sample_for_testing(0);
- EXPECT_FALSE(cordz_should_profile());
- // 1 << 16 is from kIntervalIfDisabled in cordz_functions.cc.
- EXPECT_THAT(cordz_next_sample, Eq(1 << 16));
-
- set_cordz_mean_interval(orig_sample_rate);
-}
-
-TEST(CordzFunctionsTest, ShouldProfileAlways) {
- int32_t orig_sample_rate = get_cordz_mean_interval();
-
- set_cordz_mean_interval(1);
- cordz_set_next_sample_for_testing(1);
- EXPECT_TRUE(cordz_should_profile());
- EXPECT_THAT(cordz_next_sample, Le(1));
-
- set_cordz_mean_interval(orig_sample_rate);
-}
-
-TEST(CordzFunctionsTest, DoesNotAlwaysSampleFirstCord) {
- // Set large enough interval such that the chance of 'tons' of threads
- // randomly sampling the first call is infinitely small.
- set_cordz_mean_interval(10000);
- int tries = 0;
- bool sampled = false;
- do {
- ++tries;
- ASSERT_THAT(tries, Le(1000));
- std::thread thread([&sampled] {
- sampled = cordz_should_profile();
- });
- thread.join();
- } while (sampled);
-}
-
-TEST(CordzFunctionsTest, ShouldProfileRate) {
- static constexpr int kDesiredMeanInterval = 1000;
- static constexpr int kSamples = 10000;
- int32_t orig_sample_rate = get_cordz_mean_interval();
-
- set_cordz_mean_interval(kDesiredMeanInterval);
-
- int64_t sum_of_intervals = 0;
- for (int i = 0; i < kSamples; i++) {
- // Setting next_sample to 0 will force cordz_should_profile to generate a
- // new value for next_sample each iteration.
- cordz_set_next_sample_for_testing(0);
- cordz_should_profile();
- sum_of_intervals += cordz_next_sample;
- }
-
- // The sum of independent exponential variables is an Erlang distribution,
- // which is a gamma distribution where the shape parameter is equal to the
- // number of summands. The distribution used for cordz_should_profile is
- // actually floor(Exponential(1/mean)) which introduces bias. However, we can
- // apply the squint-really-hard correction factor. That is, when mean is
- // large, then if we squint really hard the shape of the distribution between
- // N and N+1 looks like a uniform distribution. On average, each value for
- // next_sample will be about 0.5 lower than we would expect from an
- // exponential distribution. This squint-really-hard correction approach won't
- // work when mean is smaller than about 10 but works fine when mean is 1000.
- //
- // We can use R to calculate a confidence interval. This
- // shows how to generate a confidence interval with a false positive rate of
- // one in a billion.
- //
- // $ R -q
- // > mean = 1000
- // > kSamples = 10000
- // > errorRate = 1e-9
- // > correction = -kSamples / 2
- // > low = qgamma(errorRate/2, kSamples, 1/mean) + correction
- // > high = qgamma(1 - errorRate/2, kSamples, 1/mean) + correction
- // > low
- // [1] 9396115
- // > high
- // [1] 10618100
- EXPECT_THAT(sum_of_intervals, Ge(9396115));
- EXPECT_THAT(sum_of_intervals, Le(10618100));
-
- set_cordz_mean_interval(orig_sample_rate);
-}
-
-#else // ABSL_INTERNAL_CORDZ_ENABLED
-
-TEST(CordzFunctionsTest, ShouldProfileDisabled) {
- int32_t orig_sample_rate = get_cordz_mean_interval();
-
- set_cordz_mean_interval(1);
- cordz_set_next_sample_for_testing(0);
- EXPECT_FALSE(cordz_should_profile());
-
- set_cordz_mean_interval(orig_sample_rate);
-}
-
-#endif // ABSL_INTERNAL_CORDZ_ENABLED
-
-} // namespace
-} // namespace cord_internal
-ABSL_NAMESPACE_END
-} // namespace absl