MCPcopy Create free account
hub / github.com/apache/impala / TEST

Function TEST

be/src/runtime/free-pool-test.cc:29–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

27namespace impala {
28
29TEST(FreePoolTest, Basic) {
30 MemTracker tracker;
31 MemPool mem_pool(&tracker);
32 FreePool pool(&mem_pool);
33
34 // Start off with some corner cases.
35 uint8_t* p1 = pool.Allocate(0);
36 ASSERT_TRUE(p1 != NULL);
37 pool.Free(p1);
38 pool.Free(NULL);
39
40 EXPECT_EQ(mem_pool.total_allocated_bytes(), 0);
41 p1 = pool.Allocate(1);
42 *p1 = 111; // Scribble something to make sure it doesn't mess up the list.
43 ASSERT_TRUE(p1 != NULL);
44 EXPECT_EQ(mem_pool.total_allocated_bytes(), 16);
45 pool.Free(p1);
46
47 // Allocating this should return p again.
48 for (int i = 0; i < 10; ++i) {
49 uint8_t* p2 = pool.Allocate(1);
50 *p2 = 111;
51 EXPECT_EQ(p1, p2);
52 EXPECT_EQ(mem_pool.total_allocated_bytes(), 16);
53 pool.Free(p2);
54 }
55
56 uint8_t* p2 = pool.Allocate(1);
57 *p2 = 111;
58 // p3 will cause a new allocation.
59 uint8_t* p3 = pool.Allocate(1);
60 *p3 = 111;
61 EXPECT_TRUE(p1 == p2);
62 EXPECT_TRUE(p1 != p3);
63 EXPECT_EQ(mem_pool.total_allocated_bytes(), 32);
64 pool.Free(p2);
65 pool.Free(p3);
66
67 // We know have 2 1 byte allocations, which were rounded up to 8 bytes. Make an 8
68 // byte allocation, which can reuse one of the existing ones.
69 uint8_t* p4 = pool.Allocate(2);
70 memset(p4, 123, 2);
71 EXPECT_EQ(mem_pool.total_allocated_bytes(), 32);
72 EXPECT_TRUE(p4 == p1 || p4 == p2 || p4 == p3);
73 pool.Free(p4);
74
75 // Make a 9 byte allocation, which requires a new allocation.
76 uint8_t* p5 = pool.Allocate(9);
77 memset(p5, 123, 9);
78 EXPECT_EQ(mem_pool.total_allocated_bytes(), 56);
79 pool.Free(p5);
80 EXPECT_TRUE(p5 != p1);
81 EXPECT_TRUE(p5 != p2);
82 EXPECT_TRUE(p5 != p3);
83
84 // Everything's freed. Try grabbing the ones that have been allocated.
85 p1 = pool.Allocate(1);
86 *p1 = 123;

Callers

nothing calls this directly

Calls 9

push_backMethod · 0.80
AllocateMethod · 0.45
FreeMethod · 0.45
total_allocated_bytesMethod · 0.45
FreeAllMethod · 0.45
ReallocateMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected