libuav original
Dependents: UAVCAN UAVCAN_Subscriber
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 }
Generated on Tue Jul 12 2022 17:17:31 by 1.7.2