@@ -174,4 +174,82 @@ TEST_F(OwningPtrTest, Swap) {
174
174
EXPECT_EQ (2u , TrackDestructor::Destructions);
175
175
}
176
176
177
+ TEST_F (OwningPtrTest, UniqueToOwningConstruction) {
178
+ TrackDestructor::ResetCounts ();
179
+ {
180
+ std::unique_ptr<TrackDestructor> A (new TrackDestructor (3 ));
181
+ OwningPtr<TrackDestructor> B = std::move (A);
182
+ EXPECT_FALSE (A);
183
+ EXPECT_TRUE (!A);
184
+ EXPECT_FALSE (A.get ());
185
+ EXPECT_TRUE ((bool )B);
186
+ EXPECT_FALSE (!B);
187
+ EXPECT_TRUE (B.get ());
188
+ EXPECT_TRUE (B.isValid ());
189
+ EXPECT_EQ (3 , (*B).val );
190
+ EXPECT_EQ (3 , B->val );
191
+ EXPECT_EQ (0u , TrackDestructor::Destructions);
192
+ }
193
+ EXPECT_EQ (1u , TrackDestructor::Destructions);
194
+ }
195
+
196
+ TEST_F (OwningPtrTest, UniqueToOwningAssignment) {
197
+ TrackDestructor::ResetCounts ();
198
+ {
199
+ std::unique_ptr<TrackDestructor> A (new TrackDestructor (3 ));
200
+ OwningPtr<TrackDestructor> B (new TrackDestructor (4 ));
201
+ B = std::move (A);
202
+ EXPECT_FALSE (A);
203
+ EXPECT_TRUE (!A);
204
+ EXPECT_FALSE (A.get ());
205
+ EXPECT_TRUE ((bool )B);
206
+ EXPECT_FALSE (!B);
207
+ EXPECT_TRUE (B.get ());
208
+ EXPECT_TRUE (B.isValid ());
209
+ EXPECT_EQ (3 , (*B).val );
210
+ EXPECT_EQ (3 , B->val );
211
+ EXPECT_EQ (1u , TrackDestructor::Destructions);
212
+ }
213
+ EXPECT_EQ (2u , TrackDestructor::Destructions);
214
+ }
215
+
216
+ TEST_F (OwningPtrTest, TakeUniqueConstruction) {
217
+ TrackDestructor::ResetCounts ();
218
+ {
219
+ OwningPtr<TrackDestructor> A (new TrackDestructor (3 ));
220
+ std::unique_ptr<TrackDestructor> B = A.take_unique ();
221
+ EXPECT_FALSE (A);
222
+ EXPECT_TRUE (!A);
223
+ EXPECT_FALSE (A.get ());
224
+ EXPECT_FALSE (A.isValid ());
225
+ EXPECT_TRUE ((bool )B);
226
+ EXPECT_FALSE (!B);
227
+ EXPECT_TRUE (B.get ());
228
+ EXPECT_EQ (3 , (*B).val );
229
+ EXPECT_EQ (3 , B->val );
230
+ EXPECT_EQ (0u , TrackDestructor::Destructions);
231
+ }
232
+ EXPECT_EQ (1u , TrackDestructor::Destructions);
233
+ }
234
+
235
+ #if LLVM_HAS_RVALUE_REFERENCE_THIS
236
+ TEST_F (OwningPtrTest, OwningToUniqueConstruction) {
237
+ TrackDestructor::ResetCounts ();
238
+ {
239
+ OwningPtr<TrackDestructor> A (new TrackDestructor (3 ));
240
+ std::unique_ptr<TrackDestructor> B = std::move (A);
241
+ EXPECT_FALSE (A);
242
+ EXPECT_TRUE (!A);
243
+ EXPECT_FALSE (A.get ());
244
+ EXPECT_FALSE (A.isValid ());
245
+ EXPECT_TRUE ((bool )B);
246
+ EXPECT_FALSE (!B);
247
+ EXPECT_TRUE (B.get ());
248
+ EXPECT_EQ (3 , (*B).val );
249
+ EXPECT_EQ (3 , B->val );
250
+ EXPECT_EQ (0u , TrackDestructor::Destructions);
251
+ }
252
+ EXPECT_EQ (1u , TrackDestructor::Destructions);
253
+ }
254
+ #endif
177
255
}
0 commit comments