Don't construct/destroy object twice

PiperOrigin-RevId: 446274314
Change-Id: Ibf641808c533a10e0aef8d1601095e539ae5c43a
pull/1163/merge
Abseil Team 3 years ago committed by Copybara-Service
parent cc04c0e074
commit 8d9cef25c7
  1. 21
      absl/memory/memory_test.cc

@ -548,22 +548,23 @@ struct MinimalMockAllocator {
TEST(AllocatorTraits, FunctionsMinimal) {
int trace = 0;
int hint;
TestValue x(&trace);
alignas(TestValue) char buffer[sizeof(TestValue)];
auto* x = reinterpret_cast<TestValue*>(buffer);
MinimalMockAllocator mock;
using Traits = absl::allocator_traits<MinimalMockAllocator>;
EXPECT_CALL(mock, allocate(7)).WillRepeatedly(Return(&x));
EXPECT_CALL(mock, deallocate(&x, 7));
EXPECT_CALL(mock, allocate(7)).WillRepeatedly(Return(x));
EXPECT_CALL(mock, deallocate(x, 7));
EXPECT_EQ(&x, Traits::allocate(mock, 7));
EXPECT_EQ(x, Traits::allocate(mock, 7));
static_cast<void>(Traits::allocate(mock, 7, static_cast<const void*>(&hint)));
EXPECT_EQ(&x, Traits::allocate(mock, 7, static_cast<const void*>(&hint)));
Traits::deallocate(mock, &x, 7);
EXPECT_EQ(x, Traits::allocate(mock, 7, static_cast<const void*>(&hint)));
Traits::deallocate(mock, x, 7);
EXPECT_EQ(0, trace);
Traits::construct(mock, x, &trace);
EXPECT_EQ(1, trace);
Traits::construct(mock, &x, &trace);
EXPECT_EQ(2, trace);
Traits::destroy(mock, &x);
EXPECT_EQ(1, trace);
Traits::destroy(mock, x);
EXPECT_EQ(0, trace);
EXPECT_EQ(std::numeric_limits<size_t>::max() / sizeof(TestValue),
Traits::max_size(mock));

Loading…
Cancel
Save