Skip to content

Commit 011aeed

Browse files
dinordcopybara-github
authored andcommitted
absl/utility: Delete tests for C++11-compatible integer_sequence and friends
These used to be independent implementations. Now that they are aliases, maintaining tests doesn't make sense anymore. PiperOrigin-RevId: 589947915 Change-Id: I555496e3467d56a75468b180383482eee2e8f198
1 parent 8843e8e commit 011aeed

File tree

1 file changed

+0
-129
lines changed

1 file changed

+0
-129
lines changed

absl/utility/utility_test.cc

Lines changed: 0 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -30,139 +30,10 @@
3030

3131
namespace {
3232

33-
#ifdef _MSC_VER
34-
// Warnings for unused variables in this test are false positives. On other
35-
// platforms, they are suppressed by ABSL_ATTRIBUTE_UNUSED, but that doesn't
36-
// work on MSVC.
37-
// Both the unused variables and the name length warnings are due to calls
38-
// to absl::make_index_sequence with very large values, creating very long type
39-
// names. The resulting warnings are so long they make build output unreadable.
40-
#pragma warning(push)
41-
#pragma warning(disable : 4503) // decorated name length exceeded
42-
#pragma warning(disable : 4101) // unreferenced local variable
43-
#endif // _MSC_VER
44-
4533
using ::testing::ElementsAre;
4634
using ::testing::Pointee;
4735
using ::testing::StaticAssertTypeEq;
4836

49-
TEST(IntegerSequenceTest, ValueType) {
50-
StaticAssertTypeEq<int, absl::integer_sequence<int>::value_type>();
51-
StaticAssertTypeEq<char, absl::integer_sequence<char>::value_type>();
52-
}
53-
54-
TEST(IntegerSequenceTest, Size) {
55-
EXPECT_EQ(0, (absl::integer_sequence<int>::size()));
56-
EXPECT_EQ(1, (absl::integer_sequence<int, 0>::size()));
57-
EXPECT_EQ(1, (absl::integer_sequence<int, 1>::size()));
58-
EXPECT_EQ(2, (absl::integer_sequence<int, 1, 2>::size()));
59-
EXPECT_EQ(3, (absl::integer_sequence<int, 0, 1, 2>::size()));
60-
EXPECT_EQ(3, (absl::integer_sequence<int, -123, 123, 456>::size()));
61-
constexpr size_t sz = absl::integer_sequence<int, 0, 1>::size();
62-
EXPECT_EQ(2, sz);
63-
}
64-
65-
TEST(IntegerSequenceTest, MakeIndexSequence) {
66-
StaticAssertTypeEq<absl::index_sequence<>, absl::make_index_sequence<0>>();
67-
StaticAssertTypeEq<absl::index_sequence<0>, absl::make_index_sequence<1>>();
68-
StaticAssertTypeEq<absl::index_sequence<0, 1>,
69-
absl::make_index_sequence<2>>();
70-
StaticAssertTypeEq<absl::index_sequence<0, 1, 2>,
71-
absl::make_index_sequence<3>>();
72-
}
73-
74-
TEST(IntegerSequenceTest, MakeIntegerSequence) {
75-
StaticAssertTypeEq<absl::integer_sequence<int>,
76-
absl::make_integer_sequence<int, 0>>();
77-
StaticAssertTypeEq<absl::integer_sequence<int, 0>,
78-
absl::make_integer_sequence<int, 1>>();
79-
StaticAssertTypeEq<absl::integer_sequence<int, 0, 1>,
80-
absl::make_integer_sequence<int, 2>>();
81-
StaticAssertTypeEq<absl::integer_sequence<int, 0, 1, 2>,
82-
absl::make_integer_sequence<int, 3>>();
83-
}
84-
85-
template <typename... Ts>
86-
class Counter {};
87-
88-
template <size_t... Is>
89-
void CountAll(absl::index_sequence<Is...>) {
90-
// We only need an alias here, but instantiate a variable to silence warnings
91-
// for unused typedefs in some compilers.
92-
ABSL_ATTRIBUTE_UNUSED Counter<absl::make_index_sequence<Is>...> seq;
93-
}
94-
95-
// This test verifies that absl::make_index_sequence can handle large arguments
96-
// without blowing up template instantiation stack, going OOM or taking forever
97-
// to compile (there is hard 15 minutes limit imposed by forge).
98-
TEST(IntegerSequenceTest, MakeIndexSequencePerformance) {
99-
// O(log N) template instantiations.
100-
// We only need an alias here, but instantiate a variable to silence warnings
101-
// for unused typedefs in some compilers.
102-
ABSL_ATTRIBUTE_UNUSED absl::make_index_sequence<(1 << 16) - 1> seq;
103-
// O(N) template instantiations.
104-
CountAll(absl::make_index_sequence<(1 << 8) - 1>());
105-
}
106-
107-
template <typename F, typename Tup, size_t... Is>
108-
auto ApplyFromTupleImpl(F f, const Tup& tup, absl::index_sequence<Is...>)
109-
-> decltype(f(std::get<Is>(tup)...)) {
110-
return f(std::get<Is>(tup)...);
111-
}
112-
113-
template <typename Tup>
114-
using TupIdxSeq = absl::make_index_sequence<std::tuple_size<Tup>::value>;
115-
116-
template <typename F, typename Tup>
117-
auto ApplyFromTuple(F f, const Tup& tup)
118-
-> decltype(ApplyFromTupleImpl(f, tup, TupIdxSeq<Tup>{})) {
119-
return ApplyFromTupleImpl(f, tup, TupIdxSeq<Tup>{});
120-
}
121-
122-
template <typename T>
123-
std::string Fmt(const T& x) {
124-
std::ostringstream os;
125-
os << x;
126-
return os.str();
127-
}
128-
129-
struct PoorStrCat {
130-
template <typename... Args>
131-
std::string operator()(const Args&... args) const {
132-
std::string r;
133-
for (const auto& e : {Fmt(args)...}) r += e;
134-
return r;
135-
}
136-
};
137-
138-
template <typename Tup, size_t... Is>
139-
std::vector<std::string> TupStringVecImpl(const Tup& tup,
140-
absl::index_sequence<Is...>) {
141-
return {Fmt(std::get<Is>(tup))...};
142-
}
143-
144-
template <typename... Ts>
145-
std::vector<std::string> TupStringVec(const std::tuple<Ts...>& tup) {
146-
return TupStringVecImpl(tup, absl::index_sequence_for<Ts...>());
147-
}
148-
149-
TEST(MakeIndexSequenceTest, ApplyFromTupleExample) {
150-
PoorStrCat f{};
151-
EXPECT_EQ("12abc3.14", f(12, "abc", 3.14));
152-
EXPECT_EQ("12abc3.14", ApplyFromTuple(f, std::make_tuple(12, "abc", 3.14)));
153-
}
154-
155-
TEST(IndexSequenceForTest, Basic) {
156-
StaticAssertTypeEq<absl::index_sequence<>, absl::index_sequence_for<>>();
157-
StaticAssertTypeEq<absl::index_sequence<0>, absl::index_sequence_for<int>>();
158-
StaticAssertTypeEq<absl::index_sequence<0, 1, 2, 3>,
159-
absl::index_sequence_for<int, void, char, int>>();
160-
}
161-
162-
TEST(IndexSequenceForTest, Example) {
163-
EXPECT_THAT(TupStringVec(std::make_tuple(12, "abc", 3.14)),
164-
ElementsAre("12", "abc", "3.14"));
165-
}
16637

16738
int Function(int a, int b) { return a - b; }
16839

0 commit comments

Comments
 (0)