libuav original
Dependents: UAVCAN UAVCAN_Subscriber
outgoing_transfer_registry.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <algorithm> 00006 #include <gtest/gtest.h> 00007 #include <uavcan/transport/outgoing_transfer_registry.hpp> 00008 #include "../clock.hpp" 00009 #include "transfer_test_helpers.hpp" 00010 00011 00012 TEST(OutgoingTransferRegistry, Basic) 00013 { 00014 using uavcan::OutgoingTransferRegistryKey; 00015 uavcan::PoolAllocator<uavcan::MemPoolBlockSize * 2, uavcan::MemPoolBlockSize> poolmgr; 00016 uavcan::OutgoingTransferRegistry otr(poolmgr); 00017 00018 otr.cleanup(tsMono(1000)); 00019 00020 static const int NUM_KEYS = 5; 00021 const OutgoingTransferRegistryKey keys[NUM_KEYS] = 00022 { 00023 OutgoingTransferRegistryKey(123, uavcan::TransferTypeServiceRequest, 42), 00024 OutgoingTransferRegistryKey(321, uavcan::TransferTypeMessageBroadcast, 0), 00025 OutgoingTransferRegistryKey(213, uavcan::TransferTypeServiceRequest, 2), 00026 OutgoingTransferRegistryKey(312, uavcan::TransferTypeServiceRequest, 4), 00027 OutgoingTransferRegistryKey(456, uavcan::TransferTypeServiceRequest, 2) 00028 }; 00029 00030 ASSERT_EQ(0, otr.accessOrCreate(keys[0], tsMono(1000000))->get()); 00031 ASSERT_EQ(0, otr.accessOrCreate(keys[1], tsMono(1000000))->get()); 00032 ASSERT_EQ(0, otr.accessOrCreate(keys[2], tsMono(1000000))->get()); 00033 ASSERT_EQ(0, otr.accessOrCreate(keys[3], tsMono(1000000))->get()); 00034 ASSERT_FALSE(otr.accessOrCreate(keys[4], tsMono(1000000))); // OOM 00035 00036 /* 00037 * Incrementing a little 00038 */ 00039 otr.accessOrCreate(keys[0], tsMono(2000000))->increment(); 00040 otr.accessOrCreate(keys[0], tsMono(4000000))->increment(); 00041 otr.accessOrCreate(keys[0], tsMono(3000000))->increment(); 00042 ASSERT_EQ(3, otr.accessOrCreate(keys[0], tsMono(5000000))->get()); 00043 00044 otr.accessOrCreate(keys[2], tsMono(2000000))->increment(); 00045 otr.accessOrCreate(keys[2], tsMono(3000000))->increment(); 00046 ASSERT_EQ(2, otr.accessOrCreate(keys[2], tsMono(6000000))->get()); 00047 00048 otr.accessOrCreate(keys[3], tsMono(9000000))->increment(); 00049 ASSERT_EQ(1, otr.accessOrCreate(keys[3], tsMono(4000000))->get()); 00050 00051 ASSERT_EQ(0, otr.accessOrCreate(keys[1], tsMono(4000000))->get()); 00052 00053 ASSERT_FALSE(otr.accessOrCreate(keys[4], tsMono(1000000))); // Still OOM 00054 00055 /* 00056 * Checking existence 00057 * Exist: 0, 1, 2, 3 00058 * Does not exist: 4 00059 */ 00060 ASSERT_TRUE(otr.exists(keys[1].getDataTypeID(), keys[1].getTransferType())); 00061 ASSERT_TRUE(otr.exists(keys[0].getDataTypeID(), keys[0].getTransferType())); 00062 ASSERT_TRUE(otr.exists(keys[3].getDataTypeID(), keys[3].getTransferType())); 00063 ASSERT_TRUE(otr.exists(keys[2].getDataTypeID(), keys[2].getTransferType())); 00064 00065 ASSERT_FALSE(otr.exists(keys[1].getDataTypeID(), keys[2].getTransferType())); // Invalid combination 00066 ASSERT_FALSE(otr.exists(keys[0].getDataTypeID(), keys[1].getTransferType())); // Invalid combination 00067 ASSERT_FALSE(otr.exists(keys[4].getDataTypeID(), keys[4].getTransferType())); // Plain missing 00068 00069 /* 00070 * Cleaning up 00071 */ 00072 otr.cleanup(tsMono(4000001)); // Kills 1, 3 00073 ASSERT_EQ(0, otr.accessOrCreate(keys[1], tsMono(1000000))->get()); 00074 ASSERT_EQ(0, otr.accessOrCreate(keys[3], tsMono(1000000))->get()); 00075 otr.accessOrCreate(keys[1], tsMono(5000000))->increment(); 00076 otr.accessOrCreate(keys[3], tsMono(5000000))->increment(); 00077 00078 ASSERT_EQ(3, otr.accessOrCreate(keys[0], tsMono(5000000))->get()); 00079 ASSERT_EQ(2, otr.accessOrCreate(keys[2], tsMono(6000000))->get()); 00080 00081 otr.cleanup(tsMono(5000001)); // Kills 1, 3 (He needs a bath, Jud. He stinks of the ground you buried him in.), 0 00082 ASSERT_EQ(0, otr.accessOrCreate(keys[0], tsMono(1000000))->get()); 00083 ASSERT_EQ(0, otr.accessOrCreate(keys[1], tsMono(1000000))->get()); 00084 ASSERT_EQ(0, otr.accessOrCreate(keys[3], tsMono(1000000))->get()); 00085 00086 ASSERT_EQ(2, otr.accessOrCreate(keys[2], tsMono(1000000))->get()); 00087 00088 otr.cleanup(tsMono(5000001)); // Frees some memory for 4 00089 ASSERT_EQ(0, otr.accessOrCreate(keys[0], tsMono(1000000))->get()); 00090 }
Generated on Tue Jul 12 2022 17:17:33 by 1.7.2