xref: /aosp_15_r20/external/cronet/base/memory/singleton_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 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 <stdint.h>
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/at_exit.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/memory/aligned_memory.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/memory/singleton.h"
10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace base {
13*6777b538SAndroid Build Coastguard Worker namespace {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker static_assert(DefaultSingletonTraits<int>::kRegisterAtExit == true,
16*6777b538SAndroid Build Coastguard Worker               "object must be deleted on process exit");
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker typedef void (*CallbackFunc)();
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker template <size_t alignment>
21*6777b538SAndroid Build Coastguard Worker class AlignedData {
22*6777b538SAndroid Build Coastguard Worker  public:
23*6777b538SAndroid Build Coastguard Worker   AlignedData() = default;
24*6777b538SAndroid Build Coastguard Worker   ~AlignedData() = default;
25*6777b538SAndroid Build Coastguard Worker   alignas(alignment) char data_[alignment];
26*6777b538SAndroid Build Coastguard Worker };
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker class IntSingleton {
29*6777b538SAndroid Build Coastguard Worker  public:
GetInstance()30*6777b538SAndroid Build Coastguard Worker   static IntSingleton* GetInstance() {
31*6777b538SAndroid Build Coastguard Worker     return Singleton<IntSingleton>::get();
32*6777b538SAndroid Build Coastguard Worker   }
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   int value_;
35*6777b538SAndroid Build Coastguard Worker };
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker class Init5Singleton {
38*6777b538SAndroid Build Coastguard Worker  public:
39*6777b538SAndroid Build Coastguard Worker   struct Trait;
40*6777b538SAndroid Build Coastguard Worker 
GetInstance()41*6777b538SAndroid Build Coastguard Worker   static Init5Singleton* GetInstance() {
42*6777b538SAndroid Build Coastguard Worker     return Singleton<Init5Singleton, Trait>::get();
43*6777b538SAndroid Build Coastguard Worker   }
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   int value_;
46*6777b538SAndroid Build Coastguard Worker };
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker struct Init5Singleton::Trait : public DefaultSingletonTraits<Init5Singleton> {
Newbase::__anon2f1763790111::Init5Singleton::Trait49*6777b538SAndroid Build Coastguard Worker   static Init5Singleton* New() {
50*6777b538SAndroid Build Coastguard Worker     Init5Singleton* instance = new Init5Singleton();
51*6777b538SAndroid Build Coastguard Worker     instance->value_ = 5;
52*6777b538SAndroid Build Coastguard Worker     return instance;
53*6777b538SAndroid Build Coastguard Worker   }
54*6777b538SAndroid Build Coastguard Worker };
55*6777b538SAndroid Build Coastguard Worker 
SingletonInt()56*6777b538SAndroid Build Coastguard Worker int* SingletonInt() {
57*6777b538SAndroid Build Coastguard Worker   return &IntSingleton::GetInstance()->value_;
58*6777b538SAndroid Build Coastguard Worker }
59*6777b538SAndroid Build Coastguard Worker 
SingletonInt5()60*6777b538SAndroid Build Coastguard Worker int* SingletonInt5() {
61*6777b538SAndroid Build Coastguard Worker   return &Init5Singleton::GetInstance()->value_;
62*6777b538SAndroid Build Coastguard Worker }
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker template <typename Type>
65*6777b538SAndroid Build Coastguard Worker struct CallbackTrait : public DefaultSingletonTraits<Type> {
Deletebase::__anon2f1763790111::CallbackTrait66*6777b538SAndroid Build Coastguard Worker   static void Delete(Type* instance) {
67*6777b538SAndroid Build Coastguard Worker     if (instance->callback_)
68*6777b538SAndroid Build Coastguard Worker       (instance->callback_)();
69*6777b538SAndroid Build Coastguard Worker     DefaultSingletonTraits<Type>::Delete(instance);
70*6777b538SAndroid Build Coastguard Worker   }
71*6777b538SAndroid Build Coastguard Worker };
72*6777b538SAndroid Build Coastguard Worker 
73*6777b538SAndroid Build Coastguard Worker class CallbackSingleton {
74*6777b538SAndroid Build Coastguard Worker  public:
CallbackSingleton()75*6777b538SAndroid Build Coastguard Worker   CallbackSingleton() : callback_(nullptr) {}
76*6777b538SAndroid Build Coastguard Worker   CallbackFunc callback_;
77*6777b538SAndroid Build Coastguard Worker };
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker class CallbackSingletonWithNoLeakTrait : public CallbackSingleton {
80*6777b538SAndroid Build Coastguard Worker  public:
81*6777b538SAndroid Build Coastguard Worker   struct Trait : public CallbackTrait<CallbackSingletonWithNoLeakTrait> { };
82*6777b538SAndroid Build Coastguard Worker 
CallbackSingletonWithNoLeakTrait()83*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithNoLeakTrait() : CallbackSingleton() { }
84*6777b538SAndroid Build Coastguard Worker 
GetInstance()85*6777b538SAndroid Build Coastguard Worker   static CallbackSingletonWithNoLeakTrait* GetInstance() {
86*6777b538SAndroid Build Coastguard Worker     return Singleton<CallbackSingletonWithNoLeakTrait, Trait>::get();
87*6777b538SAndroid Build Coastguard Worker   }
88*6777b538SAndroid Build Coastguard Worker };
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker class CallbackSingletonWithLeakTrait : public CallbackSingleton {
91*6777b538SAndroid Build Coastguard Worker  public:
92*6777b538SAndroid Build Coastguard Worker   struct Trait : public CallbackTrait<CallbackSingletonWithLeakTrait> {
93*6777b538SAndroid Build Coastguard Worker     static const bool kRegisterAtExit = false;
94*6777b538SAndroid Build Coastguard Worker   };
95*6777b538SAndroid Build Coastguard Worker 
CallbackSingletonWithLeakTrait()96*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithLeakTrait() : CallbackSingleton() { }
97*6777b538SAndroid Build Coastguard Worker 
GetInstance()98*6777b538SAndroid Build Coastguard Worker   static CallbackSingletonWithLeakTrait* GetInstance() {
99*6777b538SAndroid Build Coastguard Worker     return Singleton<CallbackSingletonWithLeakTrait, Trait>::get();
100*6777b538SAndroid Build Coastguard Worker   }
101*6777b538SAndroid Build Coastguard Worker };
102*6777b538SAndroid Build Coastguard Worker 
103*6777b538SAndroid Build Coastguard Worker class CallbackSingletonWithStaticTrait : public CallbackSingleton {
104*6777b538SAndroid Build Coastguard Worker  public:
105*6777b538SAndroid Build Coastguard Worker   struct Trait;
106*6777b538SAndroid Build Coastguard Worker 
CallbackSingletonWithStaticTrait()107*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithStaticTrait() : CallbackSingleton() { }
108*6777b538SAndroid Build Coastguard Worker 
GetInstance()109*6777b538SAndroid Build Coastguard Worker   static CallbackSingletonWithStaticTrait* GetInstance() {
110*6777b538SAndroid Build Coastguard Worker     return Singleton<CallbackSingletonWithStaticTrait, Trait>::get();
111*6777b538SAndroid Build Coastguard Worker   }
112*6777b538SAndroid Build Coastguard Worker };
113*6777b538SAndroid Build Coastguard Worker 
114*6777b538SAndroid Build Coastguard Worker struct CallbackSingletonWithStaticTrait::Trait
115*6777b538SAndroid Build Coastguard Worker     : public StaticMemorySingletonTraits<CallbackSingletonWithStaticTrait> {
Deletebase::__anon2f1763790111::CallbackSingletonWithStaticTrait::Trait116*6777b538SAndroid Build Coastguard Worker   static void Delete(CallbackSingletonWithStaticTrait* instance) {
117*6777b538SAndroid Build Coastguard Worker     if (instance->callback_)
118*6777b538SAndroid Build Coastguard Worker       (instance->callback_)();
119*6777b538SAndroid Build Coastguard Worker     StaticMemorySingletonTraits<CallbackSingletonWithStaticTrait>::Delete(
120*6777b538SAndroid Build Coastguard Worker         instance);
121*6777b538SAndroid Build Coastguard Worker   }
122*6777b538SAndroid Build Coastguard Worker };
123*6777b538SAndroid Build Coastguard Worker 
124*6777b538SAndroid Build Coastguard Worker template <class Type>
125*6777b538SAndroid Build Coastguard Worker class AlignedTestSingleton {
126*6777b538SAndroid Build Coastguard Worker  public:
127*6777b538SAndroid Build Coastguard Worker   AlignedTestSingleton() = default;
128*6777b538SAndroid Build Coastguard Worker   ~AlignedTestSingleton() = default;
GetInstance()129*6777b538SAndroid Build Coastguard Worker   static AlignedTestSingleton* GetInstance() {
130*6777b538SAndroid Build Coastguard Worker     return Singleton<AlignedTestSingleton,
131*6777b538SAndroid Build Coastguard Worker                      StaticMemorySingletonTraits<AlignedTestSingleton>>::get();
132*6777b538SAndroid Build Coastguard Worker   }
133*6777b538SAndroid Build Coastguard Worker 
134*6777b538SAndroid Build Coastguard Worker   Type type_;
135*6777b538SAndroid Build Coastguard Worker };
136*6777b538SAndroid Build Coastguard Worker 
137*6777b538SAndroid Build Coastguard Worker 
SingletonNoLeak(CallbackFunc CallOnQuit)138*6777b538SAndroid Build Coastguard Worker void SingletonNoLeak(CallbackFunc CallOnQuit) {
139*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithNoLeakTrait::GetInstance()->callback_ = CallOnQuit;
140*6777b538SAndroid Build Coastguard Worker }
141*6777b538SAndroid Build Coastguard Worker 
SingletonLeak(CallbackFunc CallOnQuit)142*6777b538SAndroid Build Coastguard Worker void SingletonLeak(CallbackFunc CallOnQuit) {
143*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithLeakTrait::GetInstance()->callback_ = CallOnQuit;
144*6777b538SAndroid Build Coastguard Worker }
145*6777b538SAndroid Build Coastguard Worker 
GetLeakySingleton()146*6777b538SAndroid Build Coastguard Worker CallbackFunc* GetLeakySingleton() {
147*6777b538SAndroid Build Coastguard Worker   return &CallbackSingletonWithLeakTrait::GetInstance()->callback_;
148*6777b538SAndroid Build Coastguard Worker }
149*6777b538SAndroid Build Coastguard Worker 
DeleteLeakySingleton()150*6777b538SAndroid Build Coastguard Worker void DeleteLeakySingleton() {
151*6777b538SAndroid Build Coastguard Worker   DefaultSingletonTraits<CallbackSingletonWithLeakTrait>::Delete(
152*6777b538SAndroid Build Coastguard Worker       CallbackSingletonWithLeakTrait::GetInstance());
153*6777b538SAndroid Build Coastguard Worker }
154*6777b538SAndroid Build Coastguard Worker 
SingletonStatic(CallbackFunc CallOnQuit)155*6777b538SAndroid Build Coastguard Worker void SingletonStatic(CallbackFunc CallOnQuit) {
156*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithStaticTrait::GetInstance()->callback_ = CallOnQuit;
157*6777b538SAndroid Build Coastguard Worker }
158*6777b538SAndroid Build Coastguard Worker 
GetStaticSingleton()159*6777b538SAndroid Build Coastguard Worker CallbackFunc* GetStaticSingleton() {
160*6777b538SAndroid Build Coastguard Worker   CallbackSingletonWithStaticTrait* instance =
161*6777b538SAndroid Build Coastguard Worker       CallbackSingletonWithStaticTrait::GetInstance();
162*6777b538SAndroid Build Coastguard Worker   if (instance == nullptr) {
163*6777b538SAndroid Build Coastguard Worker     return nullptr;
164*6777b538SAndroid Build Coastguard Worker   } else {
165*6777b538SAndroid Build Coastguard Worker     return &instance->callback_;
166*6777b538SAndroid Build Coastguard Worker   }
167*6777b538SAndroid Build Coastguard Worker }
168*6777b538SAndroid Build Coastguard Worker 
169*6777b538SAndroid Build Coastguard Worker class SingletonTest : public testing::Test {
170*6777b538SAndroid Build Coastguard Worker  public:
171*6777b538SAndroid Build Coastguard Worker   SingletonTest() = default;
172*6777b538SAndroid Build Coastguard Worker 
SetUp()173*6777b538SAndroid Build Coastguard Worker   void SetUp() override {
174*6777b538SAndroid Build Coastguard Worker     non_leak_called_ = false;
175*6777b538SAndroid Build Coastguard Worker     leaky_called_ = false;
176*6777b538SAndroid Build Coastguard Worker     static_called_ = false;
177*6777b538SAndroid Build Coastguard Worker   }
178*6777b538SAndroid Build Coastguard Worker 
179*6777b538SAndroid Build Coastguard Worker  protected:
VerifiesCallbacks()180*6777b538SAndroid Build Coastguard Worker   void VerifiesCallbacks() {
181*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(non_leak_called_);
182*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(leaky_called_);
183*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(static_called_);
184*6777b538SAndroid Build Coastguard Worker     non_leak_called_ = false;
185*6777b538SAndroid Build Coastguard Worker     leaky_called_ = false;
186*6777b538SAndroid Build Coastguard Worker     static_called_ = false;
187*6777b538SAndroid Build Coastguard Worker   }
188*6777b538SAndroid Build Coastguard Worker 
VerifiesCallbacksNotCalled()189*6777b538SAndroid Build Coastguard Worker   void VerifiesCallbacksNotCalled() {
190*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(non_leak_called_);
191*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(leaky_called_);
192*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(static_called_);
193*6777b538SAndroid Build Coastguard Worker     non_leak_called_ = false;
194*6777b538SAndroid Build Coastguard Worker     leaky_called_ = false;
195*6777b538SAndroid Build Coastguard Worker     static_called_ = false;
196*6777b538SAndroid Build Coastguard Worker   }
197*6777b538SAndroid Build Coastguard Worker 
CallbackNoLeak()198*6777b538SAndroid Build Coastguard Worker   static void CallbackNoLeak() {
199*6777b538SAndroid Build Coastguard Worker     non_leak_called_ = true;
200*6777b538SAndroid Build Coastguard Worker   }
201*6777b538SAndroid Build Coastguard Worker 
CallbackLeak()202*6777b538SAndroid Build Coastguard Worker   static void CallbackLeak() {
203*6777b538SAndroid Build Coastguard Worker     leaky_called_ = true;
204*6777b538SAndroid Build Coastguard Worker   }
205*6777b538SAndroid Build Coastguard Worker 
CallbackStatic()206*6777b538SAndroid Build Coastguard Worker   static void CallbackStatic() {
207*6777b538SAndroid Build Coastguard Worker     static_called_ = true;
208*6777b538SAndroid Build Coastguard Worker   }
209*6777b538SAndroid Build Coastguard Worker 
210*6777b538SAndroid Build Coastguard Worker  private:
211*6777b538SAndroid Build Coastguard Worker   static bool non_leak_called_;
212*6777b538SAndroid Build Coastguard Worker   static bool leaky_called_;
213*6777b538SAndroid Build Coastguard Worker   static bool static_called_;
214*6777b538SAndroid Build Coastguard Worker };
215*6777b538SAndroid Build Coastguard Worker 
216*6777b538SAndroid Build Coastguard Worker bool SingletonTest::non_leak_called_ = false;
217*6777b538SAndroid Build Coastguard Worker bool SingletonTest::leaky_called_ = false;
218*6777b538SAndroid Build Coastguard Worker bool SingletonTest::static_called_ = false;
219*6777b538SAndroid Build Coastguard Worker 
TEST_F(SingletonTest,Basic)220*6777b538SAndroid Build Coastguard Worker TEST_F(SingletonTest, Basic) {
221*6777b538SAndroid Build Coastguard Worker   int* singleton_int;
222*6777b538SAndroid Build Coastguard Worker   int* singleton_int_5;
223*6777b538SAndroid Build Coastguard Worker   CallbackFunc* leaky_singleton;
224*6777b538SAndroid Build Coastguard Worker   CallbackFunc* static_singleton;
225*6777b538SAndroid Build Coastguard Worker 
226*6777b538SAndroid Build Coastguard Worker   {
227*6777b538SAndroid Build Coastguard Worker     ShadowingAtExitManager sem;
228*6777b538SAndroid Build Coastguard Worker     {
229*6777b538SAndroid Build Coastguard Worker       singleton_int = SingletonInt();
230*6777b538SAndroid Build Coastguard Worker     }
231*6777b538SAndroid Build Coastguard Worker     // Ensure POD type initialization.
232*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*singleton_int, 0);
233*6777b538SAndroid Build Coastguard Worker     *singleton_int = 1;
234*6777b538SAndroid Build Coastguard Worker 
235*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(singleton_int, SingletonInt());
236*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*singleton_int, 1);
237*6777b538SAndroid Build Coastguard Worker 
238*6777b538SAndroid Build Coastguard Worker     {
239*6777b538SAndroid Build Coastguard Worker       singleton_int_5 = SingletonInt5();
240*6777b538SAndroid Build Coastguard Worker     }
241*6777b538SAndroid Build Coastguard Worker     // Is default initialized to 5.
242*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(*singleton_int_5, 5);
243*6777b538SAndroid Build Coastguard Worker 
244*6777b538SAndroid Build Coastguard Worker     SingletonNoLeak(&CallbackNoLeak);
245*6777b538SAndroid Build Coastguard Worker     SingletonLeak(&CallbackLeak);
246*6777b538SAndroid Build Coastguard Worker     SingletonStatic(&CallbackStatic);
247*6777b538SAndroid Build Coastguard Worker     static_singleton = GetStaticSingleton();
248*6777b538SAndroid Build Coastguard Worker     leaky_singleton = GetLeakySingleton();
249*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(leaky_singleton);
250*6777b538SAndroid Build Coastguard Worker   }
251*6777b538SAndroid Build Coastguard Worker 
252*6777b538SAndroid Build Coastguard Worker   // Verify that only the expected callback has been called.
253*6777b538SAndroid Build Coastguard Worker   VerifiesCallbacks();
254*6777b538SAndroid Build Coastguard Worker   // Delete the leaky singleton.
255*6777b538SAndroid Build Coastguard Worker   DeleteLeakySingleton();
256*6777b538SAndroid Build Coastguard Worker 
257*6777b538SAndroid Build Coastguard Worker   // The static singleton can't be acquired post-atexit.
258*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, GetStaticSingleton());
259*6777b538SAndroid Build Coastguard Worker 
260*6777b538SAndroid Build Coastguard Worker   {
261*6777b538SAndroid Build Coastguard Worker     ShadowingAtExitManager sem;
262*6777b538SAndroid Build Coastguard Worker     // Verifiy that the variables were reset.
263*6777b538SAndroid Build Coastguard Worker     {
264*6777b538SAndroid Build Coastguard Worker       singleton_int = SingletonInt();
265*6777b538SAndroid Build Coastguard Worker       EXPECT_EQ(*singleton_int, 0);
266*6777b538SAndroid Build Coastguard Worker     }
267*6777b538SAndroid Build Coastguard Worker     {
268*6777b538SAndroid Build Coastguard Worker       singleton_int_5 = SingletonInt5();
269*6777b538SAndroid Build Coastguard Worker       EXPECT_EQ(*singleton_int_5, 5);
270*6777b538SAndroid Build Coastguard Worker     }
271*6777b538SAndroid Build Coastguard Worker     {
272*6777b538SAndroid Build Coastguard Worker       // Resurrect the static singleton, and assert that it
273*6777b538SAndroid Build Coastguard Worker       // still points to the same (static) memory.
274*6777b538SAndroid Build Coastguard Worker       CallbackSingletonWithStaticTrait::Trait::ResurrectForTesting();
275*6777b538SAndroid Build Coastguard Worker       EXPECT_EQ(GetStaticSingleton(), static_singleton);
276*6777b538SAndroid Build Coastguard Worker     }
277*6777b538SAndroid Build Coastguard Worker   }
278*6777b538SAndroid Build Coastguard Worker   // The leaky singleton shouldn't leak since SingletonLeak has not been called.
279*6777b538SAndroid Build Coastguard Worker   VerifiesCallbacksNotCalled();
280*6777b538SAndroid Build Coastguard Worker }
281*6777b538SAndroid Build Coastguard Worker 
TEST_F(SingletonTest,Alignment)282*6777b538SAndroid Build Coastguard Worker TEST_F(SingletonTest, Alignment) {
283*6777b538SAndroid Build Coastguard Worker   // Create some static singletons with increasing sizes and alignment
284*6777b538SAndroid Build Coastguard Worker   // requirements. By ordering this way, the linker will need to do some work to
285*6777b538SAndroid Build Coastguard Worker   // ensure proper alignment of the static data.
286*6777b538SAndroid Build Coastguard Worker   AlignedTestSingleton<int32_t>* align4 =
287*6777b538SAndroid Build Coastguard Worker       AlignedTestSingleton<int32_t>::GetInstance();
288*6777b538SAndroid Build Coastguard Worker   AlignedTestSingleton<AlignedData<32>>* align32 =
289*6777b538SAndroid Build Coastguard Worker       AlignedTestSingleton<AlignedData<32>>::GetInstance();
290*6777b538SAndroid Build Coastguard Worker   AlignedTestSingleton<AlignedData<128>>* align128 =
291*6777b538SAndroid Build Coastguard Worker       AlignedTestSingleton<AlignedData<128>>::GetInstance();
292*6777b538SAndroid Build Coastguard Worker   AlignedTestSingleton<AlignedData<4096>>* align4096 =
293*6777b538SAndroid Build Coastguard Worker       AlignedTestSingleton<AlignedData<4096>>::GetInstance();
294*6777b538SAndroid Build Coastguard Worker 
295*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(IsAligned(align4, 4));
296*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(IsAligned(align32, 32));
297*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(IsAligned(align128, 128));
298*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(IsAligned(align4096, 4096));
299*6777b538SAndroid Build Coastguard Worker }
300*6777b538SAndroid Build Coastguard Worker 
301*6777b538SAndroid Build Coastguard Worker }  // namespace
302*6777b538SAndroid Build Coastguard Worker }  // namespace base
303