about summary refs log tree commit diff
path: root/third_party/abseil_cpp/absl/types/span_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/abseil_cpp/absl/types/span_test.cc')
-rw-r--r--third_party/abseil_cpp/absl/types/span_test.cc846
1 files changed, 0 insertions, 846 deletions
diff --git a/third_party/abseil_cpp/absl/types/span_test.cc b/third_party/abseil_cpp/absl/types/span_test.cc
deleted file mode 100644
index 2584339bd3..0000000000
--- a/third_party/abseil_cpp/absl/types/span_test.cc
+++ /dev/null
@@ -1,846 +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/types/span.h"
-
-#include <array>
-#include <initializer_list>
-#include <numeric>
-#include <stdexcept>
-#include <string>
-#include <type_traits>
-#include <vector>
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "absl/base/attributes.h"
-#include "absl/base/config.h"
-#include "absl/base/internal/exception_testing.h"
-#include "absl/base/options.h"
-#include "absl/container/fixed_array.h"
-#include "absl/container/inlined_vector.h"
-#include "absl/hash/hash_testing.h"
-#include "absl/strings/str_cat.h"
-
-namespace {
-
-MATCHER_P(DataIs, data,
-          absl::StrCat("data() ", negation ? "isn't " : "is ",
-                       testing::PrintToString(data))) {
-  return arg.data() == data;
-}
-
-template <typename T>
-auto SpanIs(T data, size_t size)
-    -> decltype(testing::AllOf(DataIs(data), testing::SizeIs(size))) {
-  return testing::AllOf(DataIs(data), testing::SizeIs(size));
-}
-
-template <typename Container>
-auto SpanIs(const Container& c) -> decltype(SpanIs(c.data(), c.size())) {
-  return SpanIs(c.data(), c.size());
-}
-
-std::vector<int> MakeRamp(int len, int offset = 0) {
-  std::vector<int> v(len);
-  std::iota(v.begin(), v.end(), offset);
-  return v;
-}
-
-TEST(IntSpan, EmptyCtors) {
-  absl::Span<int> s;
-  EXPECT_THAT(s, SpanIs(nullptr, 0));
-}
-
-TEST(IntSpan, PtrLenCtor) {
-  int a[] = {1, 2, 3};
-  absl::Span<int> s(&a[0], 2);
-  EXPECT_THAT(s, SpanIs(a, 2));
-}
-
-TEST(IntSpan, ArrayCtor) {
-  int a[] = {1, 2, 3};
-  absl::Span<int> s(a);
-  EXPECT_THAT(s, SpanIs(a, 3));
-
-  EXPECT_TRUE((std::is_constructible<absl::Span<const int>, int[3]>::value));
-  EXPECT_TRUE(
-      (std::is_constructible<absl::Span<const int>, const int[3]>::value));
-  EXPECT_FALSE((std::is_constructible<absl::Span<int>, const int[3]>::value));
-  EXPECT_TRUE((std::is_convertible<int[3], absl::Span<const int>>::value));
-  EXPECT_TRUE(
-      (std::is_convertible<const int[3], absl::Span<const int>>::value));
-}
-
-template <typename T>
-void TakesGenericSpan(absl::Span<T>) {}
-
-TEST(IntSpan, ContainerCtor) {
-  std::vector<int> empty;
-  absl::Span<int> s_empty(empty);
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::vector<int> filled{1, 2, 3};
-  absl::Span<int> s_filled(filled);
-  EXPECT_THAT(s_filled, SpanIs(filled));
-
-  absl::Span<int> s_from_span(filled);
-  EXPECT_THAT(s_from_span, SpanIs(s_filled));
-
-  absl::Span<const int> const_filled = filled;
-  EXPECT_THAT(const_filled, SpanIs(filled));
-
-  absl::Span<const int> const_from_span = s_filled;
-  EXPECT_THAT(const_from_span, SpanIs(s_filled));
-
-  EXPECT_TRUE(
-      (std::is_convertible<std::vector<int>&, absl::Span<const int>>::value));
-  EXPECT_TRUE(
-      (std::is_convertible<absl::Span<int>&, absl::Span<const int>>::value));
-
-  TakesGenericSpan(absl::Span<int>(filled));
-}
-
-// A struct supplying shallow data() const.
-struct ContainerWithShallowConstData {
-  std::vector<int> storage;
-  int* data() const { return const_cast<int*>(storage.data()); }
-  int size() const { return storage.size(); }
-};
-
-TEST(IntSpan, ShallowConstness) {
-  const ContainerWithShallowConstData c{MakeRamp(20)};
-  absl::Span<int> s(
-      c);  // We should be able to do this even though data() is const.
-  s[0] = -1;
-  EXPECT_EQ(c.storage[0], -1);
-}
-
-TEST(CharSpan, StringCtor) {
-  std::string empty = "";
-  absl::Span<char> s_empty(empty);
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::string abc = "abc";
-  absl::Span<char> s_abc(abc);
-  EXPECT_THAT(s_abc, SpanIs(abc));
-
-  absl::Span<const char> s_const_abc = abc;
-  EXPECT_THAT(s_const_abc, SpanIs(abc));
-
-  EXPECT_FALSE((std::is_constructible<absl::Span<int>, std::string>::value));
-  EXPECT_FALSE(
-      (std::is_constructible<absl::Span<const int>, std::string>::value));
-  EXPECT_TRUE(
-      (std::is_convertible<std::string, absl::Span<const char>>::value));
-}
-
-TEST(IntSpan, FromConstPointer) {
-  EXPECT_TRUE((std::is_constructible<absl::Span<const int* const>,
-                                     std::vector<int*>>::value));
-  EXPECT_TRUE((std::is_constructible<absl::Span<const int* const>,
-                                     std::vector<const int*>>::value));
-  EXPECT_FALSE((
-      std::is_constructible<absl::Span<const int*>, std::vector<int*>>::value));
-  EXPECT_FALSE((
-      std::is_constructible<absl::Span<int*>, std::vector<const int*>>::value));
-}
-
-struct TypeWithMisleadingData {
-  int& data() { return i; }
-  int size() { return 1; }
-  int i;
-};
-
-struct TypeWithMisleadingSize {
-  int* data() { return &i; }
-  const char* size() { return "1"; }
-  int i;
-};
-
-TEST(IntSpan, EvilTypes) {
-  EXPECT_FALSE(
-      (std::is_constructible<absl::Span<int>, TypeWithMisleadingData&>::value));
-  EXPECT_FALSE(
-      (std::is_constructible<absl::Span<int>, TypeWithMisleadingSize&>::value));
-}
-
-struct Base {
-  int* data() { return &i; }
-  int size() { return 1; }
-  int i;
-};
-struct Derived : Base {};
-
-TEST(IntSpan, SpanOfDerived) {
-  EXPECT_TRUE((std::is_constructible<absl::Span<int>, Base&>::value));
-  EXPECT_TRUE((std::is_constructible<absl::Span<int>, Derived&>::value));
-  EXPECT_FALSE(
-      (std::is_constructible<absl::Span<Base>, std::vector<Derived>>::value));
-}
-
-void TestInitializerList(absl::Span<const int> s, const std::vector<int>& v) {
-  EXPECT_TRUE(absl::equal(s.begin(), s.end(), v.begin(), v.end()));
-}
-
-TEST(ConstIntSpan, InitializerListConversion) {
-  TestInitializerList({}, {});
-  TestInitializerList({1}, {1});
-  TestInitializerList({1, 2, 3}, {1, 2, 3});
-
-  EXPECT_FALSE((std::is_constructible<absl::Span<int>,
-                                      std::initializer_list<int>>::value));
-  EXPECT_FALSE((
-      std::is_convertible<absl::Span<int>, std::initializer_list<int>>::value));
-}
-
-TEST(IntSpan, Data) {
-  int i;
-  absl::Span<int> s(&i, 1);
-  EXPECT_EQ(&i, s.data());
-}
-
-TEST(IntSpan, SizeLengthEmpty) {
-  absl::Span<int> empty;
-  EXPECT_EQ(empty.size(), 0);
-  EXPECT_TRUE(empty.empty());
-  EXPECT_EQ(empty.size(), empty.length());
-
-  auto v = MakeRamp(10);
-  absl::Span<int> s(v);
-  EXPECT_EQ(s.size(), 10);
-  EXPECT_FALSE(s.empty());
-  EXPECT_EQ(s.size(), s.length());
-}
-
-TEST(IntSpan, ElementAccess) {
-  auto v = MakeRamp(10);
-  absl::Span<int> s(v);
-  for (int i = 0; i < s.size(); ++i) {
-    EXPECT_EQ(s[i], s.at(i));
-  }
-
-  EXPECT_EQ(s.front(), s[0]);
-  EXPECT_EQ(s.back(), s[9]);
-
-#if !defined(NDEBUG) || ABSL_OPTION_HARDENED
-  EXPECT_DEATH_IF_SUPPORTED(s[-1], "");
-  EXPECT_DEATH_IF_SUPPORTED(s[10], "");
-#endif
-}
-
-TEST(IntSpan, AtThrows) {
-  auto v = MakeRamp(10);
-  absl::Span<int> s(v);
-
-  EXPECT_EQ(s.at(9), 9);
-  ABSL_BASE_INTERNAL_EXPECT_FAIL(s.at(10), std::out_of_range,
-                                 "failed bounds check");
-}
-
-TEST(IntSpan, RemovePrefixAndSuffix) {
-  auto v = MakeRamp(20, 1);
-  absl::Span<int> s(v);
-  EXPECT_EQ(s.size(), 20);
-
-  s.remove_suffix(0);
-  s.remove_prefix(0);
-  EXPECT_EQ(s.size(), 20);
-
-  s.remove_prefix(1);
-  EXPECT_EQ(s.size(), 19);
-  EXPECT_EQ(s[0], 2);
-
-  s.remove_suffix(1);
-  EXPECT_EQ(s.size(), 18);
-  EXPECT_EQ(s.back(), 19);
-
-  s.remove_prefix(7);
-  EXPECT_EQ(s.size(), 11);
-  EXPECT_EQ(s[0], 9);
-
-  s.remove_suffix(11);
-  EXPECT_EQ(s.size(), 0);
-
-  EXPECT_EQ(v, MakeRamp(20, 1));
-
-#if !defined(NDEBUG) || ABSL_OPTION_HARDENED
-  absl::Span<int> prefix_death(v);
-  EXPECT_DEATH_IF_SUPPORTED(prefix_death.remove_prefix(21), "");
-  absl::Span<int> suffix_death(v);
-  EXPECT_DEATH_IF_SUPPORTED(suffix_death.remove_suffix(21), "");
-#endif
-}
-
-TEST(IntSpan, Subspan) {
-  std::vector<int> empty;
-  EXPECT_EQ(absl::MakeSpan(empty).subspan(), empty);
-  EXPECT_THAT(absl::MakeSpan(empty).subspan(0, 0), SpanIs(empty));
-  EXPECT_THAT(absl::MakeSpan(empty).subspan(0, absl::Span<const int>::npos),
-              SpanIs(empty));
-
-  auto ramp = MakeRamp(10);
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(), SpanIs(ramp));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(0, 10), SpanIs(ramp));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(0, absl::Span<const int>::npos),
-              SpanIs(ramp));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(0, 3), SpanIs(ramp.data(), 3));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(5, absl::Span<const int>::npos),
-              SpanIs(ramp.data() + 5, 5));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(3, 3), SpanIs(ramp.data() + 3, 3));
-  EXPECT_THAT(absl::MakeSpan(ramp).subspan(10, 5), SpanIs(ramp.data() + 10, 0));
-
-#ifdef ABSL_HAVE_EXCEPTIONS
-  EXPECT_THROW(absl::MakeSpan(ramp).subspan(11, 5), std::out_of_range);
-#else
-  EXPECT_DEATH_IF_SUPPORTED(absl::MakeSpan(ramp).subspan(11, 5), "");
-#endif
-}
-
-TEST(IntSpan, First) {
-  std::vector<int> empty;
-  EXPECT_THAT(absl::MakeSpan(empty).first(0), SpanIs(empty));
-
-  auto ramp = MakeRamp(10);
-  EXPECT_THAT(absl::MakeSpan(ramp).first(0), SpanIs(ramp.data(), 0));
-  EXPECT_THAT(absl::MakeSpan(ramp).first(10), SpanIs(ramp));
-  EXPECT_THAT(absl::MakeSpan(ramp).first(3), SpanIs(ramp.data(), 3));
-
-#ifdef ABSL_HAVE_EXCEPTIONS
-  EXPECT_THROW(absl::MakeSpan(ramp).first(11), std::out_of_range);
-#else
-  EXPECT_DEATH_IF_SUPPORTED(absl::MakeSpan(ramp).first(11), "");
-#endif
-}
-
-TEST(IntSpan, Last) {
-  std::vector<int> empty;
-  EXPECT_THAT(absl::MakeSpan(empty).last(0), SpanIs(empty));
-
-  auto ramp = MakeRamp(10);
-  EXPECT_THAT(absl::MakeSpan(ramp).last(0), SpanIs(ramp.data() + 10, 0));
-  EXPECT_THAT(absl::MakeSpan(ramp).last(10), SpanIs(ramp));
-  EXPECT_THAT(absl::MakeSpan(ramp).last(3), SpanIs(ramp.data() + 7, 3));
-
-#ifdef ABSL_HAVE_EXCEPTIONS
-  EXPECT_THROW(absl::MakeSpan(ramp).last(11), std::out_of_range);
-#else
-  EXPECT_DEATH_IF_SUPPORTED(absl::MakeSpan(ramp).last(11), "");
-#endif
-}
-
-TEST(IntSpan, MakeSpanPtrLength) {
-  std::vector<int> empty;
-  auto s_empty = absl::MakeSpan(empty.data(), empty.size());
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::array<int, 3> a{{1, 2, 3}};
-  auto s = absl::MakeSpan(a.data(), a.size());
-  EXPECT_THAT(s, SpanIs(a));
-
-  EXPECT_THAT(absl::MakeConstSpan(empty.data(), empty.size()), SpanIs(s_empty));
-  EXPECT_THAT(absl::MakeConstSpan(a.data(), a.size()), SpanIs(s));
-}
-
-TEST(IntSpan, MakeSpanTwoPtrs) {
-  std::vector<int> empty;
-  auto s_empty = absl::MakeSpan(empty.data(), empty.data());
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::vector<int> v{1, 2, 3};
-  auto s = absl::MakeSpan(v.data(), v.data() + 1);
-  EXPECT_THAT(s, SpanIs(v.data(), 1));
-
-  EXPECT_THAT(absl::MakeConstSpan(empty.data(), empty.data()), SpanIs(s_empty));
-  EXPECT_THAT(absl::MakeConstSpan(v.data(), v.data() + 1), SpanIs(s));
-}
-
-TEST(IntSpan, MakeSpanContainer) {
-  std::vector<int> empty;
-  auto s_empty = absl::MakeSpan(empty);
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::vector<int> v{1, 2, 3};
-  auto s = absl::MakeSpan(v);
-  EXPECT_THAT(s, SpanIs(v));
-
-  EXPECT_THAT(absl::MakeConstSpan(empty), SpanIs(s_empty));
-  EXPECT_THAT(absl::MakeConstSpan(v), SpanIs(s));
-
-  EXPECT_THAT(absl::MakeSpan(s), SpanIs(s));
-  EXPECT_THAT(absl::MakeConstSpan(s), SpanIs(s));
-}
-
-TEST(CharSpan, MakeSpanString) {
-  std::string empty = "";
-  auto s_empty = absl::MakeSpan(empty);
-  EXPECT_THAT(s_empty, SpanIs(empty));
-
-  std::string str = "abc";
-  auto s_str = absl::MakeSpan(str);
-  EXPECT_THAT(s_str, SpanIs(str));
-
-  EXPECT_THAT(absl::MakeConstSpan(empty), SpanIs(s_empty));
-  EXPECT_THAT(absl::MakeConstSpan(str), SpanIs(s_str));
-}
-
-TEST(IntSpan, MakeSpanArray) {
-  int a[] = {1, 2, 3};
-  auto s = absl::MakeSpan(a);
-  EXPECT_THAT(s, SpanIs(a, 3));
-
-  const int ca[] = {1, 2, 3};
-  auto s_ca = absl::MakeSpan(ca);
-  EXPECT_THAT(s_ca, SpanIs(ca, 3));
-
-  EXPECT_THAT(absl::MakeConstSpan(a), SpanIs(s));
-  EXPECT_THAT(absl::MakeConstSpan(ca), SpanIs(s_ca));
-}
-
-// Compile-asserts that the argument has the expected decayed type.
-template <typename Expected, typename T>
-void CheckType(const T& /* value */) {
-  testing::StaticAssertTypeEq<Expected, T>();
-}
-
-TEST(IntSpan, MakeSpanTypes) {
-  std::vector<int> vec;
-  const std::vector<int> cvec;
-  int a[1];
-  const int ca[] = {1};
-  int* ip = a;
-  const int* cip = ca;
-  std::string s = "";
-  const std::string cs = "";
-  CheckType<absl::Span<int>>(absl::MakeSpan(vec));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(cvec));
-  CheckType<absl::Span<int>>(absl::MakeSpan(ip, ip + 1));
-  CheckType<absl::Span<int>>(absl::MakeSpan(ip, 1));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(cip, cip + 1));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(cip, 1));
-  CheckType<absl::Span<int>>(absl::MakeSpan(a));
-  CheckType<absl::Span<int>>(absl::MakeSpan(a, a + 1));
-  CheckType<absl::Span<int>>(absl::MakeSpan(a, 1));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(ca));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(ca, ca + 1));
-  CheckType<absl::Span<const int>>(absl::MakeSpan(ca, 1));
-  CheckType<absl::Span<char>>(absl::MakeSpan(s));
-  CheckType<absl::Span<const char>>(absl::MakeSpan(cs));
-}
-
-TEST(ConstIntSpan, MakeConstSpanTypes) {
-  std::vector<int> vec;
-  const std::vector<int> cvec;
-  int array[1];
-  const int carray[] = {0};
-  int* ptr = array;
-  const int* cptr = carray;
-  std::string s = "";
-  std::string cs = "";
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(vec));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(cvec));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(ptr, ptr + 1));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(ptr, 1));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(cptr, cptr + 1));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(cptr, 1));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(array));
-  CheckType<absl::Span<const int>>(absl::MakeConstSpan(carray));
-  CheckType<absl::Span<const char>>(absl::MakeConstSpan(s));
-  CheckType<absl::Span<const char>>(absl::MakeConstSpan(cs));
-}
-
-TEST(IntSpan, Equality) {
-  const int arr1[] = {1, 2, 3, 4, 5};
-  int arr2[] = {1, 2, 3, 4, 5};
-  std::vector<int> vec1(std::begin(arr1), std::end(arr1));
-  std::vector<int> vec2 = vec1;
-  std::vector<int> other_vec = {2, 4, 6, 8, 10};
-  // These two slices are from different vectors, but have the same size and
-  // have the same elements (right now).  They should compare equal. Test both
-  // == and !=.
-  const absl::Span<const int> from1 = vec1;
-  const absl::Span<const int> from2 = vec2;
-  EXPECT_EQ(from1, from1);
-  EXPECT_FALSE(from1 != from1);
-  EXPECT_EQ(from1, from2);
-  EXPECT_FALSE(from1 != from2);
-
-  // These two slices have different underlying vector values. They should be
-  // considered not equal. Test both == and !=.
-  const absl::Span<const int> from_other = other_vec;
-  EXPECT_NE(from1, from_other);
-  EXPECT_FALSE(from1 == from_other);
-
-  // Comparison between a vector and its slice should be equal. And vice-versa.
-  // This ensures implicit conversion to Span works on both sides of ==.
-  EXPECT_EQ(vec1, from1);
-  EXPECT_FALSE(vec1 != from1);
-  EXPECT_EQ(from1, vec1);
-  EXPECT_FALSE(from1 != vec1);
-
-  // This verifies that absl::Span<T> can be compared freely with
-  // absl::Span<const T>.
-  const absl::Span<int> mutable_from1(vec1);
-  const absl::Span<int> mutable_from2(vec2);
-  EXPECT_EQ(from1, mutable_from1);
-  EXPECT_EQ(mutable_from1, from1);
-  EXPECT_EQ(mutable_from1, mutable_from2);
-  EXPECT_EQ(mutable_from2, mutable_from1);
-
-  // Comparison between a vector and its slice should be equal for mutable
-  // Spans as well.
-  EXPECT_EQ(vec1, mutable_from1);
-  EXPECT_FALSE(vec1 != mutable_from1);
-  EXPECT_EQ(mutable_from1, vec1);
-  EXPECT_FALSE(mutable_from1 != vec1);
-
-  // Comparison between convertible-to-Span-of-const and Span-of-mutable. Arrays
-  // are used because they're the only value type which converts to a
-  // Span-of-mutable. EXPECT_TRUE is used instead of EXPECT_EQ to avoid
-  // array-to-pointer decay.
-  EXPECT_TRUE(arr1 == mutable_from1);
-  EXPECT_FALSE(arr1 != mutable_from1);
-  EXPECT_TRUE(mutable_from1 == arr1);
-  EXPECT_FALSE(mutable_from1 != arr1);
-
-  // Comparison between convertible-to-Span-of-mutable and Span-of-const
-  EXPECT_TRUE(arr2 == from1);
-  EXPECT_FALSE(arr2 != from1);
-  EXPECT_TRUE(from1 == arr2);
-  EXPECT_FALSE(from1 != arr2);
-
-  // With a different size, the array slices should not be equal.
-  EXPECT_NE(from1, absl::Span<const int>(from1).subspan(0, from1.size() - 1));
-
-  // With different contents, the array slices should not be equal.
-  ++vec2.back();
-  EXPECT_NE(from1, from2);
-}
-
-class IntSpanOrderComparisonTest : public testing::Test {
- public:
-  IntSpanOrderComparisonTest()
-      : arr_before_{1, 2, 3},
-        arr_after_{1, 2, 4},
-        carr_after_{1, 2, 4},
-        vec_before_(std::begin(arr_before_), std::end(arr_before_)),
-        vec_after_(std::begin(arr_after_), std::end(arr_after_)),
-        before_(vec_before_),
-        after_(vec_after_),
-        cbefore_(vec_before_),
-        cafter_(vec_after_) {}
-
- protected:
-  int arr_before_[3], arr_after_[3];
-  const int carr_after_[3];
-  std::vector<int> vec_before_, vec_after_;
-  absl::Span<int> before_, after_;
-  absl::Span<const int> cbefore_, cafter_;
-};
-
-TEST_F(IntSpanOrderComparisonTest, CompareSpans) {
-  EXPECT_TRUE(cbefore_ < cafter_);
-  EXPECT_TRUE(cbefore_ <= cafter_);
-  EXPECT_TRUE(cafter_ > cbefore_);
-  EXPECT_TRUE(cafter_ >= cbefore_);
-
-  EXPECT_FALSE(cbefore_ > cafter_);
-  EXPECT_FALSE(cafter_ < cbefore_);
-
-  EXPECT_TRUE(before_ < after_);
-  EXPECT_TRUE(before_ <= after_);
-  EXPECT_TRUE(after_ > before_);
-  EXPECT_TRUE(after_ >= before_);
-
-  EXPECT_FALSE(before_ > after_);
-  EXPECT_FALSE(after_ < before_);
-
-  EXPECT_TRUE(cbefore_ < after_);
-  EXPECT_TRUE(cbefore_ <= after_);
-  EXPECT_TRUE(after_ > cbefore_);
-  EXPECT_TRUE(after_ >= cbefore_);
-
-  EXPECT_FALSE(cbefore_ > after_);
-  EXPECT_FALSE(after_ < cbefore_);
-}
-
-TEST_F(IntSpanOrderComparisonTest, SpanOfConstAndContainer) {
-  EXPECT_TRUE(cbefore_ < vec_after_);
-  EXPECT_TRUE(cbefore_ <= vec_after_);
-  EXPECT_TRUE(vec_after_ > cbefore_);
-  EXPECT_TRUE(vec_after_ >= cbefore_);
-
-  EXPECT_FALSE(cbefore_ > vec_after_);
-  EXPECT_FALSE(vec_after_ < cbefore_);
-
-  EXPECT_TRUE(arr_before_ < cafter_);
-  EXPECT_TRUE(arr_before_ <= cafter_);
-  EXPECT_TRUE(cafter_ > arr_before_);
-  EXPECT_TRUE(cafter_ >= arr_before_);
-
-  EXPECT_FALSE(arr_before_ > cafter_);
-  EXPECT_FALSE(cafter_ < arr_before_);
-}
-
-TEST_F(IntSpanOrderComparisonTest, SpanOfMutableAndContainer) {
-  EXPECT_TRUE(vec_before_ < after_);
-  EXPECT_TRUE(vec_before_ <= after_);
-  EXPECT_TRUE(after_ > vec_before_);
-  EXPECT_TRUE(after_ >= vec_before_);
-
-  EXPECT_FALSE(vec_before_ > after_);
-  EXPECT_FALSE(after_ < vec_before_);
-
-  EXPECT_TRUE(before_ < carr_after_);
-  EXPECT_TRUE(before_ <= carr_after_);
-  EXPECT_TRUE(carr_after_ > before_);
-  EXPECT_TRUE(carr_after_ >= before_);
-
-  EXPECT_FALSE(before_ > carr_after_);
-  EXPECT_FALSE(carr_after_ < before_);
-}
-
-TEST_F(IntSpanOrderComparisonTest, EqualSpans) {
-  EXPECT_FALSE(before_ < before_);
-  EXPECT_TRUE(before_ <= before_);
-  EXPECT_FALSE(before_ > before_);
-  EXPECT_TRUE(before_ >= before_);
-}
-
-TEST_F(IntSpanOrderComparisonTest, Subspans) {
-  auto subspan = before_.subspan(0, 1);
-  EXPECT_TRUE(subspan < before_);
-  EXPECT_TRUE(subspan <= before_);
-  EXPECT_TRUE(before_ > subspan);
-  EXPECT_TRUE(before_ >= subspan);
-
-  EXPECT_FALSE(subspan > before_);
-  EXPECT_FALSE(before_ < subspan);
-}
-
-TEST_F(IntSpanOrderComparisonTest, EmptySpans) {
-  absl::Span<int> empty;
-  EXPECT_FALSE(empty < empty);
-  EXPECT_TRUE(empty <= empty);
-  EXPECT_FALSE(empty > empty);
-  EXPECT_TRUE(empty >= empty);
-
-  EXPECT_TRUE(empty < before_);
-  EXPECT_TRUE(empty <= before_);
-  EXPECT_TRUE(before_ > empty);
-  EXPECT_TRUE(before_ >= empty);
-
-  EXPECT_FALSE(empty > before_);
-  EXPECT_FALSE(before_ < empty);
-}
-
-TEST(IntSpan, ExposesContainerTypesAndConsts) {
-  absl::Span<int> slice;
-  CheckType<absl::Span<int>::iterator>(slice.begin());
-  EXPECT_TRUE((std::is_convertible<decltype(slice.begin()),
-                                   absl::Span<int>::const_iterator>::value));
-  CheckType<absl::Span<int>::const_iterator>(slice.cbegin());
-  EXPECT_TRUE((std::is_convertible<decltype(slice.end()),
-                                   absl::Span<int>::const_iterator>::value));
-  CheckType<absl::Span<int>::const_iterator>(slice.cend());
-  CheckType<absl::Span<int>::reverse_iterator>(slice.rend());
-  EXPECT_TRUE(
-      (std::is_convertible<decltype(slice.rend()),
-                           absl::Span<int>::const_reverse_iterator>::value));
-  CheckType<absl::Span<int>::const_reverse_iterator>(slice.crend());
-  testing::StaticAssertTypeEq<int, absl::Span<int>::value_type>();
-  testing::StaticAssertTypeEq<int, absl::Span<const int>::value_type>();
-  testing::StaticAssertTypeEq<int*, absl::Span<int>::pointer>();
-  testing::StaticAssertTypeEq<const int*, absl::Span<const int>::pointer>();
-  testing::StaticAssertTypeEq<int&, absl::Span<int>::reference>();
-  testing::StaticAssertTypeEq<const int&, absl::Span<const int>::reference>();
-  testing::StaticAssertTypeEq<const int&, absl::Span<int>::const_reference>();
-  testing::StaticAssertTypeEq<const int&,
-                              absl::Span<const int>::const_reference>();
-  EXPECT_EQ(static_cast<absl::Span<int>::size_type>(-1), absl::Span<int>::npos);
-}
-
-TEST(IntSpan, IteratorsAndReferences) {
-  auto accept_pointer = [](int*) {};
-  auto accept_reference = [](int&) {};
-  auto accept_iterator = [](absl::Span<int>::iterator) {};
-  auto accept_const_iterator = [](absl::Span<int>::const_iterator) {};
-  auto accept_reverse_iterator = [](absl::Span<int>::reverse_iterator) {};
-  auto accept_const_reverse_iterator =
-      [](absl::Span<int>::const_reverse_iterator) {};
-
-  int a[1];
-  absl::Span<int> s = a;
-
-  accept_pointer(s.data());
-  accept_iterator(s.begin());
-  accept_const_iterator(s.begin());
-  accept_const_iterator(s.cbegin());
-  accept_iterator(s.end());
-  accept_const_iterator(s.end());
-  accept_const_iterator(s.cend());
-  accept_reverse_iterator(s.rbegin());
-  accept_const_reverse_iterator(s.rbegin());
-  accept_const_reverse_iterator(s.crbegin());
-  accept_reverse_iterator(s.rend());
-  accept_const_reverse_iterator(s.rend());
-  accept_const_reverse_iterator(s.crend());
-
-  accept_reference(s[0]);
-  accept_reference(s.at(0));
-  accept_reference(s.front());
-  accept_reference(s.back());
-}
-
-TEST(IntSpan, IteratorsAndReferences_Const) {
-  auto accept_pointer = [](int*) {};
-  auto accept_reference = [](int&) {};
-  auto accept_iterator = [](absl::Span<int>::iterator) {};
-  auto accept_const_iterator = [](absl::Span<int>::const_iterator) {};
-  auto accept_reverse_iterator = [](absl::Span<int>::reverse_iterator) {};
-  auto accept_const_reverse_iterator =
-      [](absl::Span<int>::const_reverse_iterator) {};
-
-  int a[1];
-  const absl::Span<int> s = a;
-
-  accept_pointer(s.data());
-  accept_iterator(s.begin());
-  accept_const_iterator(s.begin());
-  accept_const_iterator(s.cbegin());
-  accept_iterator(s.end());
-  accept_const_iterator(s.end());
-  accept_const_iterator(s.cend());
-  accept_reverse_iterator(s.rbegin());
-  accept_const_reverse_iterator(s.rbegin());
-  accept_const_reverse_iterator(s.crbegin());
-  accept_reverse_iterator(s.rend());
-  accept_const_reverse_iterator(s.rend());
-  accept_const_reverse_iterator(s.crend());
-
-  accept_reference(s[0]);
-  accept_reference(s.at(0));
-  accept_reference(s.front());
-  accept_reference(s.back());
-}
-
-TEST(IntSpan, NoexceptTest) {
-  int a[] = {1, 2, 3};
-  std::vector<int> v;
-  EXPECT_TRUE(noexcept(absl::Span<const int>()));
-  EXPECT_TRUE(noexcept(absl::Span<const int>(a, 2)));
-  EXPECT_TRUE(noexcept(absl::Span<const int>(a)));
-  EXPECT_TRUE(noexcept(absl::Span<const int>(v)));
-  EXPECT_TRUE(noexcept(absl::Span<int>(v)));
-  EXPECT_TRUE(noexcept(absl::Span<const int>({1, 2, 3})));
-  EXPECT_TRUE(noexcept(absl::MakeSpan(v)));
-  EXPECT_TRUE(noexcept(absl::MakeSpan(a)));
-  EXPECT_TRUE(noexcept(absl::MakeSpan(a, 2)));
-  EXPECT_TRUE(noexcept(absl::MakeSpan(a, a + 1)));
-  EXPECT_TRUE(noexcept(absl::MakeConstSpan(v)));
-  EXPECT_TRUE(noexcept(absl::MakeConstSpan(a)));
-  EXPECT_TRUE(noexcept(absl::MakeConstSpan(a, 2)));
-  EXPECT_TRUE(noexcept(absl::MakeConstSpan(a, a + 1)));
-
-  absl::Span<int> s(v);
-  EXPECT_TRUE(noexcept(s.data()));
-  EXPECT_TRUE(noexcept(s.size()));
-  EXPECT_TRUE(noexcept(s.length()));
-  EXPECT_TRUE(noexcept(s.empty()));
-  EXPECT_TRUE(noexcept(s[0]));
-  EXPECT_TRUE(noexcept(s.front()));
-  EXPECT_TRUE(noexcept(s.back()));
-  EXPECT_TRUE(noexcept(s.begin()));
-  EXPECT_TRUE(noexcept(s.cbegin()));
-  EXPECT_TRUE(noexcept(s.end()));
-  EXPECT_TRUE(noexcept(s.cend()));
-  EXPECT_TRUE(noexcept(s.rbegin()));
-  EXPECT_TRUE(noexcept(s.crbegin()));
-  EXPECT_TRUE(noexcept(s.rend()));
-  EXPECT_TRUE(noexcept(s.crend()));
-  EXPECT_TRUE(noexcept(s.remove_prefix(0)));
-  EXPECT_TRUE(noexcept(s.remove_suffix(0)));
-}
-
-// ConstexprTester exercises expressions in a constexpr context. Simply placing
-// the expression in a constexpr function is not enough, as some compilers will
-// simply compile the constexpr function as runtime code. Using template
-// parameters forces compile-time execution.
-template <int i>
-struct ConstexprTester {};
-
-#define ABSL_TEST_CONSTEXPR(expr)                       \
-  do {                                                  \
-    ABSL_ATTRIBUTE_UNUSED ConstexprTester<(expr, 1)> t; \
-  } while (0)
-
-struct ContainerWithConstexprMethods {
-  constexpr int size() const { return 1; }
-  constexpr const int* data() const { return &i; }
-  const int i;
-};
-
-TEST(ConstIntSpan, ConstexprTest) {
-  static constexpr int a[] = {1, 2, 3};
-  static constexpr int sized_arr[2] = {1, 2};
-  static constexpr ContainerWithConstexprMethods c{1};
-  ABSL_TEST_CONSTEXPR(absl::Span<const int>());
-  ABSL_TEST_CONSTEXPR(absl::Span<const int>(a, 2));
-  ABSL_TEST_CONSTEXPR(absl::Span<const int>(sized_arr));
-  ABSL_TEST_CONSTEXPR(absl::Span<const int>(c));
-  ABSL_TEST_CONSTEXPR(absl::MakeSpan(&a[0], 1));
-  ABSL_TEST_CONSTEXPR(absl::MakeSpan(c));
-  ABSL_TEST_CONSTEXPR(absl::MakeSpan(a));
-  ABSL_TEST_CONSTEXPR(absl::MakeConstSpan(&a[0], 1));
-  ABSL_TEST_CONSTEXPR(absl::MakeConstSpan(c));
-  ABSL_TEST_CONSTEXPR(absl::MakeConstSpan(a));
-
-  constexpr absl::Span<const int> span = c;
-  ABSL_TEST_CONSTEXPR(span.data());
-  ABSL_TEST_CONSTEXPR(span.size());
-  ABSL_TEST_CONSTEXPR(span.length());
-  ABSL_TEST_CONSTEXPR(span.empty());
-  ABSL_TEST_CONSTEXPR(span.begin());
-  ABSL_TEST_CONSTEXPR(span.cbegin());
-  ABSL_TEST_CONSTEXPR(span.subspan(0, 0));
-  ABSL_TEST_CONSTEXPR(span.first(1));
-  ABSL_TEST_CONSTEXPR(span.last(1));
-  ABSL_TEST_CONSTEXPR(span[0]);
-}
-
-struct BigStruct {
-  char bytes[10000];
-};
-
-TEST(Span, SpanSize) {
-  EXPECT_LE(sizeof(absl::Span<int>), 2 * sizeof(void*));
-  EXPECT_LE(sizeof(absl::Span<BigStruct>), 2 * sizeof(void*));
-}
-
-TEST(Span, Hash) {
-  int array[] = {1, 2, 3, 4};
-  int array2[] = {1, 2, 3};
-  using T = absl::Span<const int>;
-  EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
-      {// Empties
-       T(), T(nullptr, 0), T(array, 0), T(array2, 0),
-       // Different array with same value
-       T(array, 3), T(array2), T({1, 2, 3}),
-       // Same array, but different length
-       T(array, 1), T(array, 2),
-       // Same length, but different array
-       T(array + 1, 2), T(array + 2, 2)}));
-}
-
-}  // namespace