xref: /aosp_15_r20/external/cronet/base/containers/heap_array_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2024 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/containers/heap_array.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include <algorithm>
10*6777b538SAndroid Build Coastguard Worker #include <type_traits>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr_exclusion.h"
14*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace base {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker namespace {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker class DestructCounter {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   DestructCounter() = default;
~DestructCounter()23*6777b538SAndroid Build Coastguard Worker   ~DestructCounter() {
24*6777b538SAndroid Build Coastguard Worker     if (where_) {
25*6777b538SAndroid Build Coastguard Worker       (*where_)++;
26*6777b538SAndroid Build Coastguard Worker     }
27*6777b538SAndroid Build Coastguard Worker   }
28*6777b538SAndroid Build Coastguard Worker 
set_where(size_t * where)29*6777b538SAndroid Build Coastguard Worker   void set_where(size_t* where) { where_ = where; }
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker  private:
32*6777b538SAndroid Build Coastguard Worker   // RAW_PTR_EXCLUSION: Stack location only.
33*6777b538SAndroid Build Coastguard Worker   RAW_PTR_EXCLUSION size_t* where_ = nullptr;
34*6777b538SAndroid Build Coastguard Worker };
35*6777b538SAndroid Build Coastguard Worker 
CStyleInvoker(void (* cb)(void *),void * arg)36*6777b538SAndroid Build Coastguard Worker extern "C" void CStyleInvoker(void (*cb)(void*), void* arg) {
37*6777b538SAndroid Build Coastguard Worker   (*cb)(arg);
38*6777b538SAndroid Build Coastguard Worker }
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker }  // namespace
41*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,DefaultConstructor)42*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, DefaultConstructor) {
43*6777b538SAndroid Build Coastguard Worker   HeapArray<uint32_t> vec;
44*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(vec.empty());
45*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 0u);
46*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.data(), nullptr);
47*6777b538SAndroid Build Coastguard Worker }
48*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,WithSizeZero)49*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, WithSizeZero) {
50*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(0u);
51*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 0u);
52*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.data(), nullptr);
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,WithSizeNonZero)55*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, WithSizeNonZero) {
56*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(2u);
57*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 2u);
58*6777b538SAndroid Build Coastguard Worker   EXPECT_NE(vec.data(), nullptr);
59*6777b538SAndroid Build Coastguard Worker }
60*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,FromOwningPointer)61*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, FromOwningPointer) {
62*6777b538SAndroid Build Coastguard Worker   auto vec = UNSAFE_BUFFERS(
63*6777b538SAndroid Build Coastguard Worker       HeapArray<uint32_t>::FromOwningPointer(new uint32_t[3], 3u));
64*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 3u);
65*6777b538SAndroid Build Coastguard Worker   EXPECT_NE(vec.data(), nullptr);
66*6777b538SAndroid Build Coastguard Worker }
67*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,MoveConstructor)68*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, MoveConstructor) {
69*6777b538SAndroid Build Coastguard Worker   auto that = HeapArray<uint32_t>::WithSize(2u);
70*6777b538SAndroid Build Coastguard Worker   base::HeapArray<uint32_t> vec(std::move(that));
71*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 2u);
72*6777b538SAndroid Build Coastguard Worker   EXPECT_NE(vec.data(), nullptr);
73*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(that.size(), 0u);
74*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(that.data(), nullptr);
75*6777b538SAndroid Build Coastguard Worker }
76*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,MoveAssign)77*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, MoveAssign) {
78*6777b538SAndroid Build Coastguard Worker   auto that = HeapArray<uint32_t>::WithSize(2u);
79*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(4u);
80*6777b538SAndroid Build Coastguard Worker   vec = std::move(that);
81*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.size(), 2u);
82*6777b538SAndroid Build Coastguard Worker   EXPECT_NE(vec.data(), nullptr);
83*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(that.size(), 0u);
84*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(that.data(), nullptr);
85*6777b538SAndroid Build Coastguard Worker }
86*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,DataAndIndex)87*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, DataAndIndex) {
88*6777b538SAndroid Build Coastguard Worker   HeapArray<uint32_t> empty;
89*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, empty.data());
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(2u);
92*6777b538SAndroid Build Coastguard Worker   vec[0] = 100u;
93*6777b538SAndroid Build Coastguard Worker   vec[1] = 101u;
94*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.data()[0], 100u);
95*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(vec.data()[1], 101u);
96*6777b538SAndroid Build Coastguard Worker }
97*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,IteratorAndIndex)98*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, IteratorAndIndex) {
99*6777b538SAndroid Build Coastguard Worker   const HeapArray<uint32_t> empty;
100*6777b538SAndroid Build Coastguard Worker   static_assert(
101*6777b538SAndroid Build Coastguard Worker       std::is_const_v<std::remove_reference_t<decltype(*empty.begin())>>);
102*6777b538SAndroid Build Coastguard Worker   static_assert(
103*6777b538SAndroid Build Coastguard Worker       std::is_const_v<std::remove_reference_t<decltype(*empty.end())>>);
104*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(empty.begin(), empty.end());
105*6777b538SAndroid Build Coastguard Worker 
106*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(2u);
107*6777b538SAndroid Build Coastguard Worker   static_assert(
108*6777b538SAndroid Build Coastguard Worker       !std::is_const_v<std::remove_reference_t<decltype(*vec.begin())>>);
109*6777b538SAndroid Build Coastguard Worker   static_assert(
110*6777b538SAndroid Build Coastguard Worker       !std::is_const_v<std::remove_reference_t<decltype(*vec.end())>>);
111*6777b538SAndroid Build Coastguard Worker   vec[0] = 100u;
112*6777b538SAndroid Build Coastguard Worker   vec[1] = 101u;
113*6777b538SAndroid Build Coastguard Worker   uint32_t expected = 100;
114*6777b538SAndroid Build Coastguard Worker   for (auto i : vec) {
115*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(i, expected);
116*6777b538SAndroid Build Coastguard Worker     ++expected;
117*6777b538SAndroid Build Coastguard Worker   }
118*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(expected, 102u);
119*6777b538SAndroid Build Coastguard Worker }
120*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArrayDeathTest,BadIndex)121*6777b538SAndroid Build Coastguard Worker TEST(HeapArrayDeathTest, BadIndex) {
122*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(2u);
123*6777b538SAndroid Build Coastguard Worker   EXPECT_DEATH_IF_SUPPORTED(vec[2], "");
124*6777b538SAndroid Build Coastguard Worker }
125*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,AsSpan)126*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, AsSpan) {
127*6777b538SAndroid Build Coastguard Worker   {
128*6777b538SAndroid Build Coastguard Worker     auto vec = HeapArray<uint32_t>::WithSize(2u);
129*6777b538SAndroid Build Coastguard Worker     auto s = vec.as_span();
130*6777b538SAndroid Build Coastguard Worker     static_assert(std::same_as<decltype(s), span<uint32_t>>);
131*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(s.size(), 2u);
132*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(s.data(), vec.data());
133*6777b538SAndroid Build Coastguard Worker   }
134*6777b538SAndroid Build Coastguard Worker   {
135*6777b538SAndroid Build Coastguard Worker     const auto vec = HeapArray<uint32_t>::WithSize(2u);
136*6777b538SAndroid Build Coastguard Worker     auto s = vec.as_span();
137*6777b538SAndroid Build Coastguard Worker     static_assert(std::same_as<decltype(s), span<const uint32_t>>);
138*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(s.size(), 2u);
139*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(s.data(), vec.data());
140*6777b538SAndroid Build Coastguard Worker   }
141*6777b538SAndroid Build Coastguard Worker }
142*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Subspan)143*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Subspan) {
144*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(4u);
145*6777b538SAndroid Build Coastguard Worker   for (size_t i = 0; i < vec.size(); ++i) {
146*6777b538SAndroid Build Coastguard Worker     vec[i] = i;
147*6777b538SAndroid Build Coastguard Worker   }
148*6777b538SAndroid Build Coastguard Worker   span<uint32_t> empty = vec.subspan(2, 0);
149*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(empty.empty());
150*6777b538SAndroid Build Coastguard Worker 
151*6777b538SAndroid Build Coastguard Worker   span<uint32_t> first = vec.subspan(0, 1);
152*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(first.size(), 1u);
153*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(first[0], 0u);
154*6777b538SAndroid Build Coastguard Worker 
155*6777b538SAndroid Build Coastguard Worker   span<uint32_t> mids = vec.subspan(1, 2);
156*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(mids.size(), 2u);
157*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(mids[0], 1u);
158*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(mids[1], 2u);
159*6777b538SAndroid Build Coastguard Worker 
160*6777b538SAndroid Build Coastguard Worker   span<uint32_t> rest = vec.subspan(3);
161*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(rest.size(), 1u);
162*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(rest[0], 3u);
163*6777b538SAndroid Build Coastguard Worker }
164*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,First)165*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, First) {
166*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(4u);
167*6777b538SAndroid Build Coastguard Worker   for (size_t i = 0; i < vec.size(); ++i) {
168*6777b538SAndroid Build Coastguard Worker     vec[i] = i;
169*6777b538SAndroid Build Coastguard Worker   }
170*6777b538SAndroid Build Coastguard Worker   span<uint32_t> empty = vec.first(0u);
171*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(empty.empty());
172*6777b538SAndroid Build Coastguard Worker 
173*6777b538SAndroid Build Coastguard Worker   span<uint32_t> some = vec.first(2u);
174*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some.size(), 2u);
175*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some[0], 0u);
176*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some[1], 1u);
177*6777b538SAndroid Build Coastguard Worker }
178*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Last)179*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Last) {
180*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(4u);
181*6777b538SAndroid Build Coastguard Worker   for (size_t i = 0; i < vec.size(); ++i) {
182*6777b538SAndroid Build Coastguard Worker     vec[i] = i;
183*6777b538SAndroid Build Coastguard Worker   }
184*6777b538SAndroid Build Coastguard Worker   span<uint32_t> empty = vec.first(0u);
185*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(empty.empty());
186*6777b538SAndroid Build Coastguard Worker 
187*6777b538SAndroid Build Coastguard Worker   span<uint32_t> some = vec.first(2u);
188*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some.size(), 2u);
189*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some[0], 0u);
190*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(some[1], 1u);
191*6777b538SAndroid Build Coastguard Worker }
192*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Init)193*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Init) {
194*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::WithSize(200);
195*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0u, vec[0]);
196*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0u, vec[199]);
197*6777b538SAndroid Build Coastguard Worker 
198*6777b538SAndroid Build Coastguard Worker   uint32_t accumulator = 0;
199*6777b538SAndroid Build Coastguard Worker   for (auto i : vec) {
200*6777b538SAndroid Build Coastguard Worker     accumulator |= i;
201*6777b538SAndroid Build Coastguard Worker   }
202*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0u, accumulator);
203*6777b538SAndroid Build Coastguard Worker }
204*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Uninit)205*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Uninit) {
206*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::Uninit(4);
207*6777b538SAndroid Build Coastguard Worker   vec[0] = 100u;
208*6777b538SAndroid Build Coastguard Worker   vec[1] = 101u;
209*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(100u, vec[0]);
210*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(101u, vec[1]);
211*6777b538SAndroid Build Coastguard Worker #if defined(MEMORY_SANITIZER)
212*6777b538SAndroid Build Coastguard Worker   // TODO(tsepez): figure out how to get a msan crash here.
213*6777b538SAndroid Build Coastguard Worker   // volatile uint32_t* x = vec.data() + 2;
214*6777b538SAndroid Build Coastguard Worker   // EXPECT_DEATH(*x, "");
215*6777b538SAndroid Build Coastguard Worker #endif
216*6777b538SAndroid Build Coastguard Worker }
217*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Fill)218*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Fill) {
219*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::Uninit(4);
220*6777b538SAndroid Build Coastguard Worker   std::ranges::fill(vec, 0x76543210);
221*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0x76543210u, vec[0]);
222*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0x76543210u, vec[1]);
223*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0x76543210u, vec[2]);
224*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0x76543210u, vec[3]);
225*6777b538SAndroid Build Coastguard Worker }
226*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,CopiedFrom)227*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, CopiedFrom) {
228*6777b538SAndroid Build Coastguard Worker   span<uint32_t> empty_span;
229*6777b538SAndroid Build Coastguard Worker   auto empty_vec = HeapArray<uint32_t>::CopiedFrom(empty_span);
230*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(0u, empty_vec.size());
231*6777b538SAndroid Build Coastguard Worker 
232*6777b538SAndroid Build Coastguard Worker   const uint32_t kData[] = {1000u, 1001u};
233*6777b538SAndroid Build Coastguard Worker   auto vec = HeapArray<uint32_t>::CopiedFrom(kData);
234*6777b538SAndroid Build Coastguard Worker   ASSERT_EQ(2u, vec.size());
235*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1000u, vec[0]);
236*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1001u, vec[1]);
237*6777b538SAndroid Build Coastguard Worker }
238*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,RunsDestructor)239*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, RunsDestructor) {
240*6777b538SAndroid Build Coastguard Worker   size_t count = 0;
241*6777b538SAndroid Build Coastguard Worker   {
242*6777b538SAndroid Build Coastguard Worker     auto vec = HeapArray<DestructCounter>::WithSize(2);
243*6777b538SAndroid Build Coastguard Worker     vec[0].set_where(&count);
244*6777b538SAndroid Build Coastguard Worker     vec[1].set_where(&count);
245*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(count, 0u);
246*6777b538SAndroid Build Coastguard Worker   }
247*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(count, 2u);
248*6777b538SAndroid Build Coastguard Worker }
249*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,CopyFrom)250*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, CopyFrom) {
251*6777b538SAndroid Build Coastguard Worker   HeapArray<uint32_t> empty;
252*6777b538SAndroid Build Coastguard Worker   HeapArray<uint32_t> something = HeapArray<uint32_t>::Uninit(2);
253*6777b538SAndroid Build Coastguard Worker   HeapArray<uint32_t> other = HeapArray<uint32_t>::Uninit(2);
254*6777b538SAndroid Build Coastguard Worker   const uint32_t kStuff[] = {1000u, 1001u};
255*6777b538SAndroid Build Coastguard Worker 
256*6777b538SAndroid Build Coastguard Worker   empty.copy_from(span<uint32_t>());  // Should not check.
257*6777b538SAndroid Build Coastguard Worker   something.copy_from(kStuff);
258*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1000u, something[0]);
259*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1001u, something[1]);
260*6777b538SAndroid Build Coastguard Worker 
261*6777b538SAndroid Build Coastguard Worker   other.copy_from(something);
262*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1000u, other[0]);
263*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(1001u, other[1]);
264*6777b538SAndroid Build Coastguard Worker }
265*6777b538SAndroid Build Coastguard Worker 
TEST(HeapArray,Leak)266*6777b538SAndroid Build Coastguard Worker TEST(HeapArray, Leak) {
267*6777b538SAndroid Build Coastguard Worker   size_t count = 0;
268*6777b538SAndroid Build Coastguard Worker   span<DestructCounter> leaked;
269*6777b538SAndroid Build Coastguard Worker   {
270*6777b538SAndroid Build Coastguard Worker     auto vec = HeapArray<DestructCounter>::WithSize(2);
271*6777b538SAndroid Build Coastguard Worker     vec[0].set_where(&count);
272*6777b538SAndroid Build Coastguard Worker     vec[1].set_where(&count);
273*6777b538SAndroid Build Coastguard Worker 
274*6777b538SAndroid Build Coastguard Worker     auto* data = vec.data();
275*6777b538SAndroid Build Coastguard Worker     leaked = std::move(vec).leak();
276*6777b538SAndroid Build Coastguard Worker     ASSERT_EQ(data, leaked.data());
277*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(count, 0u);
278*6777b538SAndroid Build Coastguard Worker   }
279*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(count, 0u);
280*6777b538SAndroid Build Coastguard Worker   CStyleInvoker(HeapArray<DestructCounter>::DeleteLeakedData, leaked.data());
281*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(count, 2u);
282*6777b538SAndroid Build Coastguard Worker }
283*6777b538SAndroid Build Coastguard Worker 
284*6777b538SAndroid Build Coastguard Worker }  // namespace base
285