libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers dynamic_memory.cpp Source File

dynamic_memory.cpp

00001 /*
00002  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
00003  */
00004 
00005 #include <gtest/gtest.h>
00006 #include <uavcan/dynamic_memory.hpp>
00007 
00008 TEST(DynamicMemory, Basic)
00009 {
00010     uavcan::PoolAllocator<128, 32> pool32;
00011     EXPECT_EQ(4, pool32.getNumFreeBlocks());
00012     EXPECT_EQ(0, pool32.getPeakNumUsedBlocks());
00013     const void* ptr1 = pool32.allocate(16);
00014     ASSERT_TRUE(ptr1);
00015     EXPECT_EQ(1, pool32.getNumUsedBlocks());
00016     EXPECT_FALSE(pool32.allocate(120));
00017     EXPECT_EQ(1, pool32.getNumUsedBlocks());
00018     pool32.deallocate(ptr1);
00019     EXPECT_EQ(0, pool32.getNumUsedBlocks());
00020     EXPECT_EQ(1, pool32.getPeakNumUsedBlocks());
00021 }
00022 
00023 TEST(DynamicMemory, OutOfMemory)
00024 {
00025     uavcan::PoolAllocator<64, 32> pool32;
00026 
00027     EXPECT_EQ(2, pool32.getNumFreeBlocks());
00028     EXPECT_EQ(0, pool32.getNumUsedBlocks());
00029     EXPECT_EQ(0, pool32.getPeakNumUsedBlocks());
00030 
00031     const void* ptr1 = pool32.allocate(32);
00032     ASSERT_TRUE(ptr1);
00033     EXPECT_EQ(1, pool32.getNumUsedBlocks());
00034     EXPECT_EQ(1, pool32.getPeakNumUsedBlocks());
00035 
00036     const void* ptr2 = pool32.allocate(32);
00037     ASSERT_TRUE(ptr2);
00038     EXPECT_EQ(2, pool32.getNumUsedBlocks());
00039     EXPECT_EQ(2, pool32.getPeakNumUsedBlocks());
00040 
00041     ASSERT_FALSE(pool32.allocate(32));        // No free blocks left --> UAVCAN_NULLPTR
00042     EXPECT_EQ(2, pool32.getNumUsedBlocks());
00043     EXPECT_EQ(0, pool32.getNumFreeBlocks());
00044     EXPECT_EQ(2, pool32.getPeakNumUsedBlocks());
00045 }
00046 
00047 TEST(DynamicMemory, LimitedPoolAllocator)
00048 {
00049     uavcan::PoolAllocator<128, 32> pool32;
00050     uavcan::LimitedPoolAllocator lim(pool32, 2);
00051 
00052     EXPECT_EQ(2, lim.getBlockCapacity());
00053     EXPECT_EQ(0, pool32.getPeakNumUsedBlocks());
00054 
00055     const void* ptr1 = lim.allocate(1);
00056     const void* ptr2 = lim.allocate(1);
00057     const void* ptr3 = lim.allocate(1);
00058 
00059     EXPECT_TRUE(ptr1);
00060     EXPECT_TRUE(ptr2);
00061     EXPECT_FALSE(ptr3);
00062 
00063     lim.deallocate(ptr2);
00064     const void* ptr4 = lim.allocate(1);
00065     lim.deallocate(ptr1);
00066     const void* ptr5 = lim.allocate(1);
00067     const void* ptr6 = lim.allocate(1);
00068 
00069     EXPECT_TRUE(ptr4);
00070     EXPECT_TRUE(ptr5);
00071     EXPECT_FALSE(ptr6);
00072 
00073     EXPECT_EQ(2, pool32.getPeakNumUsedBlocks());
00074 }