about summary refs log tree commit diff
path: root/third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc')
-rw-r--r--third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc807
1 files changed, 0 insertions, 807 deletions
diff --git a/third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc b/third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc
deleted file mode 100644
index b8dafe9323..0000000000
--- a/third_party/abseil_cpp/absl/container/inlined_vector_benchmark.cc
+++ /dev/null
@@ -1,807 +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 <array>
-#include <string>
-#include <vector>
-
-#include "benchmark/benchmark.h"
-#include "absl/base/internal/raw_logging.h"
-#include "absl/base/macros.h"
-#include "absl/container/inlined_vector.h"
-#include "absl/strings/str_cat.h"
-
-namespace {
-
-void BM_InlinedVectorFill(benchmark::State& state) {
-  const int len = state.range(0);
-  absl::InlinedVector<int, 8> v;
-  v.reserve(len);
-  for (auto _ : state) {
-    v.resize(0);  // Use resize(0) as InlinedVector releases storage on clear().
-    for (int i = 0; i < len; ++i) {
-      v.push_back(i);
-    }
-    benchmark::DoNotOptimize(v);
-  }
-}
-BENCHMARK(BM_InlinedVectorFill)->Range(1, 256);
-
-void BM_InlinedVectorFillRange(benchmark::State& state) {
-  const int len = state.range(0);
-  const std::vector<int> src(len, len);
-  absl::InlinedVector<int, 8> v;
-  v.reserve(len);
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(src);
-    v.assign(src.begin(), src.end());
-    benchmark::DoNotOptimize(v);
-  }
-}
-BENCHMARK(BM_InlinedVectorFillRange)->Range(1, 256);
-
-void BM_StdVectorFill(benchmark::State& state) {
-  const int len = state.range(0);
-  std::vector<int> v;
-  v.reserve(len);
-  for (auto _ : state) {
-    v.clear();
-    for (int i = 0; i < len; ++i) {
-      v.push_back(i);
-    }
-    benchmark::DoNotOptimize(v);
-  }
-}
-BENCHMARK(BM_StdVectorFill)->Range(1, 256);
-
-// The purpose of the next two benchmarks is to verify that
-// absl::InlinedVector is efficient when moving is more efficent than
-// copying. To do so, we use strings that are larger than the short
-// string optimization.
-bool StringRepresentedInline(std::string s) {
-  const char* chars = s.data();
-  std::string s1 = std::move(s);
-  return s1.data() != chars;
-}
-
-int GetNonShortStringOptimizationSize() {
-  for (int i = 24; i <= 192; i *= 2) {
-    if (!StringRepresentedInline(std::string(i, 'A'))) {
-      return i;
-    }
-  }
-  ABSL_RAW_LOG(
-      FATAL,
-      "Failed to find a string larger than the short string optimization");
-  return -1;
-}
-
-void BM_InlinedVectorFillString(benchmark::State& state) {
-  const int len = state.range(0);
-  const int no_sso = GetNonShortStringOptimizationSize();
-  std::string strings[4] = {std::string(no_sso, 'A'), std::string(no_sso, 'B'),
-                            std::string(no_sso, 'C'), std::string(no_sso, 'D')};
-
-  for (auto _ : state) {
-    absl::InlinedVector<std::string, 8> v;
-    for (int i = 0; i < len; i++) {
-      v.push_back(strings[i & 3]);
-    }
-  }
-  state.SetItemsProcessed(static_cast<int64_t>(state.iterations()) * len);
-}
-BENCHMARK(BM_InlinedVectorFillString)->Range(0, 1024);
-
-void BM_StdVectorFillString(benchmark::State& state) {
-  const int len = state.range(0);
-  const int no_sso = GetNonShortStringOptimizationSize();
-  std::string strings[4] = {std::string(no_sso, 'A'), std::string(no_sso, 'B'),
-                            std::string(no_sso, 'C'), std::string(no_sso, 'D')};
-
-  for (auto _ : state) {
-    std::vector<std::string> v;
-    for (int i = 0; i < len; i++) {
-      v.push_back(strings[i & 3]);
-    }
-  }
-  state.SetItemsProcessed(static_cast<int64_t>(state.iterations()) * len);
-}
-BENCHMARK(BM_StdVectorFillString)->Range(0, 1024);
-
-struct Buffer {  // some arbitrary structure for benchmarking.
-  char* base;
-  int length;
-  int capacity;
-  void* user_data;
-};
-
-void BM_InlinedVectorAssignments(benchmark::State& state) {
-  const int len = state.range(0);
-  using BufferVec = absl::InlinedVector<Buffer, 2>;
-
-  BufferVec src;
-  src.resize(len);
-
-  BufferVec dst;
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(dst);
-    benchmark::DoNotOptimize(src);
-    dst = src;
-  }
-}
-BENCHMARK(BM_InlinedVectorAssignments)
-    ->Arg(0)
-    ->Arg(1)
-    ->Arg(2)
-    ->Arg(3)
-    ->Arg(4)
-    ->Arg(20);
-
-void BM_CreateFromContainer(benchmark::State& state) {
-  for (auto _ : state) {
-    absl::InlinedVector<int, 4> src{1, 2, 3};
-    benchmark::DoNotOptimize(src);
-    absl::InlinedVector<int, 4> dst(std::move(src));
-    benchmark::DoNotOptimize(dst);
-  }
-}
-BENCHMARK(BM_CreateFromContainer);
-
-struct LargeCopyableOnly {
-  LargeCopyableOnly() : d(1024, 17) {}
-  LargeCopyableOnly(const LargeCopyableOnly& o) = default;
-  LargeCopyableOnly& operator=(const LargeCopyableOnly& o) = default;
-
-  std::vector<int> d;
-};
-
-struct LargeCopyableSwappable {
-  LargeCopyableSwappable() : d(1024, 17) {}
-
-  LargeCopyableSwappable(const LargeCopyableSwappable& o) = default;
-
-  LargeCopyableSwappable& operator=(LargeCopyableSwappable o) {
-    using std::swap;
-    swap(*this, o);
-    return *this;
-  }
-
-  friend void swap(LargeCopyableSwappable& a, LargeCopyableSwappable& b) {
-    using std::swap;
-    swap(a.d, b.d);
-  }
-
-  std::vector<int> d;
-};
-
-struct LargeCopyableMovable {
-  LargeCopyableMovable() : d(1024, 17) {}
-  // Use implicitly defined copy and move.
-
-  std::vector<int> d;
-};
-
-struct LargeCopyableMovableSwappable {
-  LargeCopyableMovableSwappable() : d(1024, 17) {}
-  LargeCopyableMovableSwappable(const LargeCopyableMovableSwappable& o) =
-      default;
-  LargeCopyableMovableSwappable(LargeCopyableMovableSwappable&& o) = default;
-
-  LargeCopyableMovableSwappable& operator=(LargeCopyableMovableSwappable o) {
-    using std::swap;
-    swap(*this, o);
-    return *this;
-  }
-  LargeCopyableMovableSwappable& operator=(LargeCopyableMovableSwappable&& o) =
-      default;
-
-  friend void swap(LargeCopyableMovableSwappable& a,
-                   LargeCopyableMovableSwappable& b) {
-    using std::swap;
-    swap(a.d, b.d);
-  }
-
-  std::vector<int> d;
-};
-
-template <typename ElementType>
-void BM_SwapElements(benchmark::State& state) {
-  const int len = state.range(0);
-  using Vec = absl::InlinedVector<ElementType, 32>;
-  Vec a(len);
-  Vec b;
-  for (auto _ : state) {
-    using std::swap;
-    benchmark::DoNotOptimize(a);
-    benchmark::DoNotOptimize(b);
-    swap(a, b);
-  }
-}
-BENCHMARK_TEMPLATE(BM_SwapElements, LargeCopyableOnly)->Range(0, 1024);
-BENCHMARK_TEMPLATE(BM_SwapElements, LargeCopyableSwappable)->Range(0, 1024);
-BENCHMARK_TEMPLATE(BM_SwapElements, LargeCopyableMovable)->Range(0, 1024);
-BENCHMARK_TEMPLATE(BM_SwapElements, LargeCopyableMovableSwappable)
-    ->Range(0, 1024);
-
-// The following benchmark is meant to track the efficiency of the vector size
-// as a function of stored type via the benchmark label. It is not meant to
-// output useful sizeof operator performance. The loop is a dummy operation
-// to fulfill the requirement of running the benchmark.
-template <typename VecType>
-void BM_Sizeof(benchmark::State& state) {
-  int size = 0;
-  for (auto _ : state) {
-    VecType vec;
-    size = sizeof(vec);
-  }
-  state.SetLabel(absl::StrCat("sz=", size));
-}
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<char, 1>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<char, 4>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<char, 7>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<char, 8>);
-
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<int, 1>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<int, 4>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<int, 7>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<int, 8>);
-
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<void*, 1>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<void*, 4>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<void*, 7>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<void*, 8>);
-
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<std::string, 1>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<std::string, 4>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<std::string, 7>);
-BENCHMARK_TEMPLATE(BM_Sizeof, absl::InlinedVector<std::string, 8>);
-
-void BM_InlinedVectorIndexInlined(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v[4]);
-  }
-}
-BENCHMARK(BM_InlinedVectorIndexInlined);
-
-void BM_InlinedVectorIndexExternal(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v[4]);
-  }
-}
-BENCHMARK(BM_InlinedVectorIndexExternal);
-
-void BM_StdVectorIndex(benchmark::State& state) {
-  std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v[4]);
-  }
-}
-BENCHMARK(BM_StdVectorIndex);
-
-void BM_InlinedVectorDataInlined(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.data());
-  }
-}
-BENCHMARK(BM_InlinedVectorDataInlined);
-
-void BM_InlinedVectorDataExternal(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.data());
-  }
-  state.SetItemsProcessed(16 * static_cast<int64_t>(state.iterations()));
-}
-BENCHMARK(BM_InlinedVectorDataExternal);
-
-void BM_StdVectorData(benchmark::State& state) {
-  std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.data());
-  }
-  state.SetItemsProcessed(16 * static_cast<int64_t>(state.iterations()));
-}
-BENCHMARK(BM_StdVectorData);
-
-void BM_InlinedVectorSizeInlined(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.size());
-  }
-}
-BENCHMARK(BM_InlinedVectorSizeInlined);
-
-void BM_InlinedVectorSizeExternal(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.size());
-  }
-}
-BENCHMARK(BM_InlinedVectorSizeExternal);
-
-void BM_StdVectorSize(benchmark::State& state) {
-  std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.size());
-  }
-}
-BENCHMARK(BM_StdVectorSize);
-
-void BM_InlinedVectorEmptyInlined(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.empty());
-  }
-}
-BENCHMARK(BM_InlinedVectorEmptyInlined);
-
-void BM_InlinedVectorEmptyExternal(benchmark::State& state) {
-  absl::InlinedVector<int, 8> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.empty());
-  }
-}
-BENCHMARK(BM_InlinedVectorEmptyExternal);
-
-void BM_StdVectorEmpty(benchmark::State& state) {
-  std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  for (auto _ : state) {
-    benchmark::DoNotOptimize(v);
-    benchmark::DoNotOptimize(v.empty());
-  }
-}
-BENCHMARK(BM_StdVectorEmpty);
-
-constexpr size_t kInlinedCapacity = 4;
-constexpr size_t kLargeSize = kInlinedCapacity * 2;
-constexpr size_t kSmallSize = kInlinedCapacity / 2;
-constexpr size_t kBatchSize = 100;
-
-#define ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_FunctionTemplate, T) \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kLargeSize);        \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kSmallSize)
-
-#define ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_FunctionTemplate, T)      \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kLargeSize, kLargeSize); \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kLargeSize, kSmallSize); \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kSmallSize, kLargeSize); \
-  BENCHMARK_TEMPLATE(BM_FunctionTemplate, T, kSmallSize, kSmallSize)
-
-template <typename T>
-using InlVec = absl::InlinedVector<T, kInlinedCapacity>;
-
-struct TrivialType {
-  size_t val;
-};
-
-class NontrivialType {
- public:
-  ABSL_ATTRIBUTE_NOINLINE NontrivialType() : val_() {
-    benchmark::DoNotOptimize(*this);
-  }
-
-  ABSL_ATTRIBUTE_NOINLINE NontrivialType(const NontrivialType& other)
-      : val_(other.val_) {
-    benchmark::DoNotOptimize(*this);
-  }
-
-  ABSL_ATTRIBUTE_NOINLINE NontrivialType& operator=(
-      const NontrivialType& other) {
-    val_ = other.val_;
-    benchmark::DoNotOptimize(*this);
-    return *this;
-  }
-
-  ABSL_ATTRIBUTE_NOINLINE ~NontrivialType() noexcept {
-    benchmark::DoNotOptimize(*this);
-  }
-
- private:
-  size_t val_;
-};
-
-template <typename T, typename PrepareVecFn, typename TestVecFn>
-void BatchedBenchmark(benchmark::State& state, PrepareVecFn prepare_vec,
-                      TestVecFn test_vec) {
-  std::array<InlVec<T>, kBatchSize> vector_batch{};
-
-  while (state.KeepRunningBatch(kBatchSize)) {
-    // Prepare batch
-    state.PauseTiming();
-    for (size_t i = 0; i < kBatchSize; ++i) {
-      prepare_vec(vector_batch.data() + i, i);
-    }
-    benchmark::DoNotOptimize(vector_batch);
-    state.ResumeTiming();
-
-    // Test batch
-    for (size_t i = 0; i < kBatchSize; ++i) {
-      test_vec(vector_batch.data() + i, i);
-    }
-  }
-}
-
-template <typename T, size_t ToSize>
-void BM_ConstructFromSize(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  auto size = ToSize;
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->~VecT(); },
-      /* test_vec = */
-      [&](void* ptr, size_t) {
-        benchmark::DoNotOptimize(size);
-        ::new (ptr) VecT(size);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromSize, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromSize, NontrivialType);
-
-template <typename T, size_t ToSize>
-void BM_ConstructFromSizeRef(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  auto size = ToSize;
-  auto ref = T();
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->~VecT(); },
-      /* test_vec = */
-      [&](void* ptr, size_t) {
-        benchmark::DoNotOptimize(size);
-        benchmark::DoNotOptimize(ref);
-        ::new (ptr) VecT(size, ref);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromSizeRef, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromSizeRef, NontrivialType);
-
-template <typename T, size_t ToSize>
-void BM_ConstructFromRange(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  std::array<T, ToSize> arr{};
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->~VecT(); },
-      /* test_vec = */
-      [&](void* ptr, size_t) {
-        benchmark::DoNotOptimize(arr);
-        ::new (ptr) VecT(arr.begin(), arr.end());
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromRange, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromRange, NontrivialType);
-
-template <typename T, size_t ToSize>
-void BM_ConstructFromCopy(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  VecT other_vec(ToSize);
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) { vec->~VecT(); },
-      /* test_vec = */
-      [&](void* ptr, size_t) {
-        benchmark::DoNotOptimize(other_vec);
-        ::new (ptr) VecT(other_vec);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromCopy, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromCopy, NontrivialType);
-
-template <typename T, size_t ToSize>
-void BM_ConstructFromMove(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  std::array<VecT, kBatchSize> vector_batch{};
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [&](InlVec<T>* vec, size_t i) {
-        vector_batch[i].clear();
-        vector_batch[i].resize(ToSize);
-        vec->~VecT();
-      },
-      /* test_vec = */
-      [&](void* ptr, size_t i) {
-        benchmark::DoNotOptimize(vector_batch[i]);
-        ::new (ptr) VecT(std::move(vector_batch[i]));
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromMove, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_ConstructFromMove, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_AssignSizeRef(benchmark::State& state) {
-  auto size = ToSize;
-  auto ref = T();
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->resize(FromSize); },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(size);
-        benchmark::DoNotOptimize(ref);
-        vec->assign(size, ref);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignSizeRef, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignSizeRef, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_AssignRange(benchmark::State& state) {
-  std::array<T, ToSize> arr{};
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->resize(FromSize); },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(arr);
-        vec->assign(arr.begin(), arr.end());
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignRange, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignRange, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_AssignFromCopy(benchmark::State& state) {
-  InlVec<T> other_vec(ToSize);
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->resize(FromSize); },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(other_vec);
-        *vec = other_vec;
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignFromCopy, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignFromCopy, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_AssignFromMove(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  std::array<VecT, kBatchSize> vector_batch{};
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [&](InlVec<T>* vec, size_t i) {
-        vector_batch[i].clear();
-        vector_batch[i].resize(ToSize);
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t i) {
-        benchmark::DoNotOptimize(vector_batch[i]);
-        *vec = std::move(vector_batch[i]);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignFromMove, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_AssignFromMove, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_ResizeSize(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) { vec->resize(ToSize); });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ResizeSize, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ResizeSize, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_ResizeSizeRef(benchmark::State& state) {
-  auto t = T();
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(t);
-        vec->resize(ToSize, t);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ResizeSizeRef, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ResizeSizeRef, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_InsertSizeRef(benchmark::State& state) {
-  auto t = T();
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(t);
-        auto* pos = vec->data() + (vec->size() / 2);
-        vec->insert(pos, t);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_InsertSizeRef, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_InsertSizeRef, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_InsertRange(benchmark::State& state) {
-  InlVec<T> other_vec(ToSize);
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t) {
-        benchmark::DoNotOptimize(other_vec);
-        auto* pos = vec->data() + (vec->size() / 2);
-        vec->insert(pos, other_vec.begin(), other_vec.end());
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_InsertRange, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_InsertRange, NontrivialType);
-
-template <typename T, size_t FromSize>
-void BM_EmplaceBack(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) { vec->emplace_back(); });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EmplaceBack, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EmplaceBack, NontrivialType);
-
-template <typename T, size_t FromSize>
-void BM_PopBack(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) { vec->pop_back(); });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_PopBack, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_PopBack, NontrivialType);
-
-template <typename T, size_t FromSize>
-void BM_EraseOne(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) {
-        auto* pos = vec->data() + (vec->size() / 2);
-        vec->erase(pos);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EraseOne, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EraseOne, NontrivialType);
-
-template <typename T, size_t FromSize>
-void BM_EraseRange(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) {
-        auto* pos = vec->data() + (vec->size() / 2);
-        vec->erase(pos, pos + 1);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EraseRange, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_EraseRange, NontrivialType);
-
-template <typename T, size_t FromSize>
-void BM_Clear(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */ [](InlVec<T>* vec, size_t) { vec->resize(FromSize); },
-      /* test_vec = */ [](InlVec<T>* vec, size_t) { vec->clear(); });
-}
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_Clear, TrivialType);
-ABSL_INTERNAL_BENCHMARK_ONE_SIZE(BM_Clear, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToCapacity>
-void BM_Reserve(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [](InlVec<T>* vec, size_t) { vec->reserve(ToCapacity); });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_Reserve, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_Reserve, NontrivialType);
-
-template <typename T, size_t FromCapacity, size_t ToCapacity>
-void BM_ShrinkToFit(benchmark::State& state) {
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [](InlVec<T>* vec, size_t) {
-        vec->clear();
-        vec->resize(ToCapacity);
-        vec->reserve(FromCapacity);
-      },
-      /* test_vec = */ [](InlVec<T>* vec, size_t) { vec->shrink_to_fit(); });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ShrinkToFit, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_ShrinkToFit, NontrivialType);
-
-template <typename T, size_t FromSize, size_t ToSize>
-void BM_Swap(benchmark::State& state) {
-  using VecT = InlVec<T>;
-  std::array<VecT, kBatchSize> vector_batch{};
-  BatchedBenchmark<T>(
-      state,
-      /* prepare_vec = */
-      [&](InlVec<T>* vec, size_t i) {
-        vector_batch[i].clear();
-        vector_batch[i].resize(ToSize);
-        vec->resize(FromSize);
-      },
-      /* test_vec = */
-      [&](InlVec<T>* vec, size_t i) {
-        using std::swap;
-        benchmark::DoNotOptimize(vector_batch[i]);
-        swap(*vec, vector_batch[i]);
-      });
-}
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_Swap, TrivialType);
-ABSL_INTERNAL_BENCHMARK_TWO_SIZE(BM_Swap, NontrivialType);
-
-}  // namespace