xref: /aosp_15_r20/external/leveldb/util/no_destructor_test.cc (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2018 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker 
5*9507f98cSAndroid Build Coastguard Worker #include "util/no_destructor.h"
6*9507f98cSAndroid Build Coastguard Worker 
7*9507f98cSAndroid Build Coastguard Worker #include <cstdint>
8*9507f98cSAndroid Build Coastguard Worker #include <cstdlib>
9*9507f98cSAndroid Build Coastguard Worker #include <utility>
10*9507f98cSAndroid Build Coastguard Worker 
11*9507f98cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
12*9507f98cSAndroid Build Coastguard Worker 
13*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
14*9507f98cSAndroid Build Coastguard Worker 
15*9507f98cSAndroid Build Coastguard Worker namespace {
16*9507f98cSAndroid Build Coastguard Worker 
17*9507f98cSAndroid Build Coastguard Worker struct DoNotDestruct {
18*9507f98cSAndroid Build Coastguard Worker  public:
DoNotDestructleveldb::__anonc79f7adf0111::DoNotDestruct19*9507f98cSAndroid Build Coastguard Worker   DoNotDestruct(uint32_t a, uint64_t b) : a(a), b(b) {}
~DoNotDestructleveldb::__anonc79f7adf0111::DoNotDestruct20*9507f98cSAndroid Build Coastguard Worker   ~DoNotDestruct() { std::abort(); }
21*9507f98cSAndroid Build Coastguard Worker 
22*9507f98cSAndroid Build Coastguard Worker   // Used to check constructor argument forwarding.
23*9507f98cSAndroid Build Coastguard Worker   uint32_t a;
24*9507f98cSAndroid Build Coastguard Worker   uint64_t b;
25*9507f98cSAndroid Build Coastguard Worker };
26*9507f98cSAndroid Build Coastguard Worker 
27*9507f98cSAndroid Build Coastguard Worker constexpr const uint32_t kGoldenA = 0xdeadbeef;
28*9507f98cSAndroid Build Coastguard Worker constexpr const uint64_t kGoldenB = 0xaabbccddeeffaabb;
29*9507f98cSAndroid Build Coastguard Worker 
30*9507f98cSAndroid Build Coastguard Worker }  // namespace
31*9507f98cSAndroid Build Coastguard Worker 
TEST(NoDestructorTest,StackInstance)32*9507f98cSAndroid Build Coastguard Worker TEST(NoDestructorTest, StackInstance) {
33*9507f98cSAndroid Build Coastguard Worker   NoDestructor<DoNotDestruct> instance(kGoldenA, kGoldenB);
34*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kGoldenA, instance.get()->a);
35*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kGoldenB, instance.get()->b);
36*9507f98cSAndroid Build Coastguard Worker }
37*9507f98cSAndroid Build Coastguard Worker 
TEST(NoDestructorTest,StaticInstance)38*9507f98cSAndroid Build Coastguard Worker TEST(NoDestructorTest, StaticInstance) {
39*9507f98cSAndroid Build Coastguard Worker   static NoDestructor<DoNotDestruct> instance(kGoldenA, kGoldenB);
40*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kGoldenA, instance.get()->a);
41*9507f98cSAndroid Build Coastguard Worker   ASSERT_EQ(kGoldenB, instance.get()->b);
42*9507f98cSAndroid Build Coastguard Worker }
43*9507f98cSAndroid Build Coastguard Worker 
44*9507f98cSAndroid Build Coastguard Worker }  // namespace leveldb
45*9507f98cSAndroid Build Coastguard Worker 
46