| 326 | |
| 327 | template <bool BIG> |
| 328 | void TestClearDeletes() { |
| 329 | Variant x; |
| 330 | EXPECT_EQ(x.get<void>(), nullptr); |
| 331 | |
| 332 | int deleted_count = 0; |
| 333 | using DC = DeleteCounter<BIG>; |
| 334 | DC dc(&deleted_count); |
| 335 | EXPECT_EQ(deleted_count, 0); |
| 336 | x = dc; |
| 337 | EXPECT_EQ(deleted_count, 0); |
| 338 | |
| 339 | EXPECT_NE(x.get<void>(), nullptr); |
| 340 | EXPECT_NE(x.get<DC>(), nullptr); |
| 341 | |
| 342 | x.clear(); |
| 343 | EXPECT_EQ(x.get<void>(), nullptr); |
| 344 | EXPECT_EQ(deleted_count, 1); |
| 345 | |
| 346 | x = dc; |
| 347 | EXPECT_EQ(deleted_count, 1); |
| 348 | |
| 349 | Variant y = x; |
| 350 | EXPECT_EQ(deleted_count, 1); |
| 351 | |
| 352 | x.clear(); |
| 353 | EXPECT_EQ(deleted_count, 2); |
| 354 | |
| 355 | y.clear(); |
| 356 | EXPECT_EQ(deleted_count, 3); |
| 357 | } |
| 358 | |
| 359 | TEST(VariantTest, ClearDeletesOnHeap) { TestClearDeletes</*BIG=*/true>(); } |
| 360 | |