MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / BOOST_AUTO_TEST_CASE

Function BOOST_AUTO_TEST_CASE

src/test/pool_tests.cpp:20–84  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18BOOST_FIXTURE_TEST_SUITE(pool_tests, BasicTestingSetup)
19
20BOOST_AUTO_TEST_CASE(basic_allocating)
21{
22 auto resource = PoolResource<8, 8>();
23 PoolResourceTester::CheckAllDataAccountedFor(resource);
24
25 // first chunk is already allocated
26 size_t expected_bytes_available = resource.ChunkSizeBytes();
27 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
28
29 // chunk is used, no more allocation
30 void* block = resource.Allocate(8, 8);
31 expected_bytes_available -= 8;
32 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
33
34 BOOST_TEST(0 == PoolResourceTester::FreeListSizes(resource)[1]);
35 resource.Deallocate(block, 8, 8);
36 PoolResourceTester::CheckAllDataAccountedFor(resource);
37 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
38
39 // alignment is too small, but the best fitting freelist is used. Nothing is allocated.
40 void* b = resource.Allocate(8, 1);
41 BOOST_TEST(b == block); // we got the same block of memory as before
42 BOOST_TEST(0 == PoolResourceTester::FreeListSizes(resource)[1]);
43 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
44
45 resource.Deallocate(block, 8, 1);
46 PoolResourceTester::CheckAllDataAccountedFor(resource);
47 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
48 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
49
50 // can't use resource because alignment is too big, allocate system memory
51 b = resource.Allocate(8, 16);
52 BOOST_TEST(b != block);
53 block = b;
54 PoolResourceTester::CheckAllDataAccountedFor(resource);
55 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
56 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
57
58 resource.Deallocate(block, 8, 16);
59 PoolResourceTester::CheckAllDataAccountedFor(resource);
60 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
61 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
62
63 // can't use chunk because size is too big
64 block = resource.Allocate(16, 8);
65 PoolResourceTester::CheckAllDataAccountedFor(resource);
66 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
67 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
68
69 resource.Deallocate(block, 16, 8);
70 PoolResourceTester::CheckAllDataAccountedFor(resource);
71 BOOST_TEST(1 == PoolResourceTester::FreeListSizes(resource)[1]);
72 BOOST_TEST(expected_bytes_available == PoolResourceTester::AvailableMemoryFromChunk(resource));
73
74 // it's possible that 0 bytes are allocated, make sure this works. In that case the call is forwarded to operator new
75 // 0 bytes takes one entry from the first freelist
76 void* p = resource.Allocate(0, 1);
77 BOOST_TEST(0 == PoolResourceTester::FreeListSizes(resource)[1]);

Callers

nothing calls this directly

Calls 13

DynamicUsageFunction · 0.85
ChunkSizeBytesMethod · 0.80
randrangeMethod · 0.80
NumAllocatedChunksMethod · 0.80
AllocateMethod · 0.45
DeallocateMethod · 0.45
emplace_backMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
push_backMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected