proxygen
IndestructibleTest.cpp File Reference
#include <folly/Indestructible.h>
#include <functional>
#include <map>
#include <memory>
#include <string>
#include <tuple>
#include <folly/Memory.h>
#include <folly/portability/GTest.h>

Go to the source code of this file.

Functions

 TEST_F (IndestructibleTest, access)
 
 TEST_F (IndestructibleTest, no_destruction)
 
 TEST_F (IndestructibleTest, empty)
 
 TEST_F (IndestructibleTest, move)
 
 TEST_F (IndestructibleTest, disabled_default_ctor)
 
 TEST_F (IndestructibleTest, list_initialization)
 
 TEST_F (IndestructibleTest, initializer_list_in_place_initialization)
 
 TEST_F (IndestructibleTest, list_initialization_explicit_implicit)
 

Function Documentation

TEST_F ( IndestructibleTest  ,
access   
)

Definition at line 57 of file IndestructibleTest.cpp.

References data, EXPECT_EQ, and m.

57  {
59  map<string, int>{{"key1", 17}, {"key2", 19}, {"key3", 23}}};
60 
61  auto& m = *data;
62  EXPECT_EQ(19, m.at("key2"));
63 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static map< string, int > m
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
TEST_F ( IndestructibleTest  ,
no_destruction   
)

Definition at line 65 of file IndestructibleTest.cpp.

References EXPECT_EQ, and value.

65  {
66  int state = 0;
67  int value = 0;
68 
69  static Indestructible<Magic> sing(
70  [&] {
71  ++state;
72  value = 7;
73  },
74  [&] { state = -1; },
75  [] {});
76  EXPECT_EQ(1, state);
77  EXPECT_EQ(7, value);
78 
79  sing.~Indestructible();
80  EXPECT_EQ(1, state);
81 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static const char *const value
Definition: Conv.cpp:50
state
Definition: http_parser.c:272
TEST_F ( IndestructibleTest  ,
empty   
)

Definition at line 83 of file IndestructibleTest.cpp.

References data, EXPECT_EQ, and m.

83  {
85  auto& m = *data;
86  EXPECT_EQ(0, m.size());
87 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static map< string, int > m
static constexpr uint64_t data[1]
Definition: Fingerprint.cpp:43
TEST_F ( IndestructibleTest  ,
move   
)

Definition at line 89 of file IndestructibleTest.cpp.

References EXPECT_EQ, folly::gen::move, and value.

89  {
90  int state = 0;
91  int value = 0;
92  int moves = 0;
93 
94  static Indestructible<Magic> sing( // move assignment
95  [&] {
96  ++state;
97  value = 7;
98  },
99  [&] { state = -1; },
100  [&] { ++moves; });
101 
102  EXPECT_EQ(1, state);
103  EXPECT_EQ(7, value);
104  EXPECT_EQ(0, moves);
105 
106  // move constructor
107  static Indestructible<Magic> move_ctor(std::move(sing));
108  EXPECT_EQ(1, state);
109  EXPECT_EQ(1, moves);
110 
111  // move assignment
112  static Indestructible<Magic> move_assign = std::move(move_ctor);
113  EXPECT_EQ(1, state);
114  EXPECT_EQ(2, moves);
115 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
static const char *const value
Definition: Conv.cpp:50
state
Definition: http_parser.c:272
TEST_F ( IndestructibleTest  ,
disabled_default_ctor   
)

Definition at line 117 of file IndestructibleTest.cpp.

References EXPECT_FALSE, EXPECT_TRUE, and value.

117  {
118  EXPECT_TRUE((std::is_constructible<Indestructible<int>>::value)) << "sanity";
119 
120  struct Foo {
121  Foo(int) {}
122  };
123  EXPECT_FALSE((std::is_constructible<Indestructible<Foo>>::value));
124  EXPECT_FALSE((std::is_constructible<Indestructible<Foo>, Magic>::value));
125  EXPECT_TRUE((std::is_constructible<Indestructible<Foo>, int>::value));
126 }
Foo(std::atomic< int > &d)
static const char *const value
Definition: Conv.cpp:50
#define EXPECT_TRUE(condition)
Definition: gtest.h:1859
#define EXPECT_FALSE(condition)
Definition: gtest.h:1862
TEST_F ( IndestructibleTest  ,
list_initialization   
)

Definition at line 128 of file IndestructibleTest.cpp.

References EXPECT_EQ, and map().

128  {
130  EXPECT_EQ(map->at(1), 2);
131 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static Map map(mapCap)
TEST_F ( IndestructibleTest  ,
initializer_list_in_place_initialization   
)

Definition at line 142 of file IndestructibleTest.cpp.

142  {
143  using I = InitializerListConstructible;
144  std::ignore = Indestructible<I>{{1, 2, 3, 4}};
145  std::ignore = Indestructible<I>{{1.2}, 4.2};
146 }
TEST_F ( IndestructibleTest  ,
list_initialization_explicit_implicit   
)

Definition at line 156 of file IndestructibleTest.cpp.

References EXPECT_TRUE, and value.

156  {
157  using E = ExplicitlyMoveConstructible;
158  using I = std::map<int, int>;
159  EXPECT_TRUE((!std::is_convertible<E, Indestructible<E>>::value));
160  EXPECT_TRUE((std::is_convertible<I, Indestructible<I>>::value));
161 }
static const char *const value
Definition: Conv.cpp:50
#define EXPECT_TRUE(condition)
Definition: gtest.h:1859