ArmNN
 20.02
BufferTests.cpp File Reference
#include "BufferManager.hpp"
#include "PacketBuffer.hpp"
#include "ProfilingUtils.hpp"
#include <armnn/Exceptions.hpp>
#include <boost/test/unit_test.hpp>

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_CASE (PacketBufferTest0)
 
 BOOST_AUTO_TEST_CASE (PacketBufferTest1)
 
 BOOST_AUTO_TEST_CASE (PacketBufferReleaseTest)
 
 BOOST_AUTO_TEST_CASE (PacketBufferCommitErrorTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveExceedingSpaceTest)
 
 BOOST_AUTO_TEST_CASE (BufferExhaustionTest)
 
 BOOST_AUTO_TEST_CASE (BufferReserveMultipleTest)
 
 BOOST_AUTO_TEST_CASE (BufferReleaseTest)
 
 BOOST_AUTO_TEST_CASE (BufferCommitTest)
 
 BOOST_AUTO_TEST_CASE (BufferMarkReadTest)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/11]

BOOST_AUTO_TEST_CASE ( PacketBufferTest0  )

Definition at line 18 of file BufferTests.cpp.

References armnn::profiling::ReadUint32(), and armnn::profiling::WriteUint32().

19 {
20  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
21 
22  BOOST_TEST(packetBuffer->GetSize() == 0);
23 
24  // Write data to the buffer
25  WriteUint32(packetBuffer, 0, 10);
26  WriteUint32(packetBuffer, 4, 20);
27  WriteUint32(packetBuffer, 8, 30);
28  WriteUint32(packetBuffer, 12, 40);
29 
30  // Commit
31  packetBuffer->Commit(16);
32 
33  // Size of buffer is equal to committed data
34  BOOST_TEST(packetBuffer->GetSize() == 16);
35 
36  // Read data from the buffer
37  auto readBuffer = packetBuffer->GetReadableData();
38  uint32_t readData0 = ReadUint32(readBuffer, 0);
39  uint32_t readData1 = ReadUint32(readBuffer, 4);
40  uint32_t readData2 = ReadUint32(readBuffer, 8);
41  uint32_t readData3 = ReadUint32(readBuffer, 12);
42 
43  // Check that data is correct
44  BOOST_TEST(readData0 == 10);
45  BOOST_TEST(readData1 == 20);
46  BOOST_TEST(readData2 == 30);
47  BOOST_TEST(readData3 == 40);
48 
49  // Mark read
50  packetBuffer->MarkRead();
51 
52  // Size of buffer become 0 after marked read
53  BOOST_TEST(packetBuffer->GetSize() == 0);
54 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [2/11]

BOOST_AUTO_TEST_CASE ( PacketBufferTest1  )

Definition at line 56 of file BufferTests.cpp.

References armnn::profiling::ReadUint32(), and armnn::profiling::WriteUint32().

57 {
58  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
59 
60  BOOST_TEST(packetBuffer->GetSize() == 0);
61 
62  // Write data to the buffer using GetWritableData
63  auto writeBuffer = packetBuffer->GetWritableData();
64  WriteUint32(writeBuffer, 0, 10);
65  WriteUint32(writeBuffer, 4, 20);
66  WriteUint32(writeBuffer, 8, 30);
67  WriteUint32(writeBuffer, 12, 40);
68 
69  packetBuffer->Commit(16);
70 
71  BOOST_TEST(packetBuffer->GetSize() == 16);
72 
73  // Read data from the buffer
74  auto readBuffer = packetBuffer->GetReadableData();
75  uint32_t readData0 = ReadUint32(readBuffer, 0);
76  uint32_t readData1 = ReadUint32(readBuffer, 4);
77  uint32_t readData2 = ReadUint32(readBuffer, 8);
78  uint32_t readData3 = ReadUint32(readBuffer, 12);
79 
80  BOOST_TEST(readData0 == 10);
81  BOOST_TEST(readData1 == 20);
82  BOOST_TEST(readData2 == 30);
83  BOOST_TEST(readData3 == 40);
84 
85  packetBuffer->MarkRead();
86 
87  BOOST_TEST(packetBuffer->GetSize() == 0);
88 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [3/11]

BOOST_AUTO_TEST_CASE ( PacketBufferReleaseTest  )

Definition at line 90 of file BufferTests.cpp.

References armnn::profiling::WriteUint32().

90  {
91  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(512);
92 
93  BOOST_TEST(packetBuffer->GetSize() == 0);
94 
95  auto writeBuffer = packetBuffer->GetWritableData();
96 
97  WriteUint32(writeBuffer, 0, 10);
98  WriteUint32(writeBuffer, 4, 20);
99  WriteUint32(writeBuffer, 8, 30);
100  WriteUint32(writeBuffer, 12, 40);
101 
102  packetBuffer->Release();
103 
104  // Size of buffer become 0 after release
105  BOOST_TEST(packetBuffer->GetSize() == 0);
106 }
void WriteUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset, uint32_t value)
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [4/11]

BOOST_AUTO_TEST_CASE ( PacketBufferCommitErrorTest  )

Definition at line 108 of file BufferTests.cpp.

109 {
110  IPacketBufferPtr packetBuffer = std::make_unique<PacketBuffer>(8);
111 
112  // Cannot commit data bigger than the max size of the buffer
113  BOOST_CHECK_THROW(packetBuffer->Commit(16);, armnn::RuntimeException);
114 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr

◆ BOOST_AUTO_TEST_CASE() [5/11]

BOOST_AUTO_TEST_CASE ( BufferReserveTest  )

Definition at line 116 of file BufferTests.cpp.

References BufferManager::Reserve().

117 {
118  BufferManager bufferManager(1, 512);
119  unsigned int reservedSize = 0;
120  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
121 
122  // Successfully reserved the buffer with requested size
123  BOOST_TEST(reservedSize == 512);
124  BOOST_TEST(packetBuffer.get());
125 }

◆ BOOST_AUTO_TEST_CASE() [6/11]

BOOST_AUTO_TEST_CASE ( BufferReserveExceedingSpaceTest  )

Definition at line 127 of file BufferTests.cpp.

References BufferManager::Reserve().

128 {
129  BufferManager bufferManager(1, 512);
130  unsigned int reservedSize = 0;
131 
132  // Cannot reserve buffer bigger than maximum buffer size
133  auto reservedBuffer = bufferManager.Reserve(1024, reservedSize);
134  BOOST_TEST(reservedSize == 0);
135  BOOST_TEST(!reservedBuffer.get());
136 }

◆ BOOST_AUTO_TEST_CASE() [7/11]

BOOST_AUTO_TEST_CASE ( BufferExhaustionTest  )

Definition at line 138 of file BufferTests.cpp.

References BufferManager::Reserve().

139 {
140  BufferManager bufferManager(1, 512);
141  unsigned int reservedSize = 0;
142  auto packetBuffer = bufferManager.Reserve(512, reservedSize);
143 
144  // Successfully reserved the buffer with requested size
145  BOOST_TEST(reservedSize == 512);
146  BOOST_TEST(packetBuffer.get());
147 
148  // Cannot reserve buffer when buffer is not available
149  auto reservedBuffer = bufferManager.Reserve(512, reservedSize);
150  BOOST_TEST(reservedSize == 0);
151  BOOST_TEST(!reservedBuffer.get());
152 }

◆ BOOST_AUTO_TEST_CASE() [8/11]

BOOST_AUTO_TEST_CASE ( BufferReserveMultipleTest  )

Definition at line 154 of file BufferTests.cpp.

References BufferManager::Reserve().

155 {
156  BufferManager bufferManager(3, 512);
157  unsigned int reservedSize0 = 0;
158  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
159 
160  // Successfully reserved the buffer with requested size
161  BOOST_TEST(reservedSize0 == 512);
162  BOOST_TEST(packetBuffer0.get());
163 
164  unsigned int reservedSize1 = 0;
165  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
166 
167  // Successfully reserved the buffer with requested size
168  BOOST_TEST(reservedSize1 == 128);
169  BOOST_TEST(packetBuffer1.get());
170 
171  unsigned int reservedSize2 = 0;
172  auto packetBuffer2 = bufferManager.Reserve(512, reservedSize2);
173 
174  // Successfully reserved the buffer with requested size
175  BOOST_TEST(reservedSize2 == 512);
176  BOOST_TEST(packetBuffer2.get());
177 
178  // Cannot reserve when buffer is not available
179  unsigned int reservedSize3 = 0;
180  auto reservedBuffer = bufferManager.Reserve(512, reservedSize3);
181  BOOST_TEST(reservedSize3 == 0);
182  BOOST_TEST(!reservedBuffer.get());
183 }

◆ BOOST_AUTO_TEST_CASE() [9/11]

BOOST_AUTO_TEST_CASE ( BufferReleaseTest  )

Definition at line 185 of file BufferTests.cpp.

References BufferManager::Release(), and BufferManager::Reserve().

186 {
187  BufferManager bufferManager(2, 512);
188  unsigned int reservedSize0 = 0;
189  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
190 
191  // Successfully reserved the buffer with requested size
192  BOOST_TEST(reservedSize0 == 512);
193  BOOST_TEST(packetBuffer0.get());
194 
195  unsigned int reservedSize1 = 0;
196  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
197 
198  // Successfully reserved the buffer with requested size
199  BOOST_TEST(reservedSize1 == 128);
200  BOOST_TEST(packetBuffer1.get());
201 
202  // Cannot reserve when buffer is not available
203  unsigned int reservedSize2 = 0;
204  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
205  BOOST_TEST(reservedSize2 == 0);
206  BOOST_TEST(!reservedBuffer.get());
207 
208  bufferManager.Release(packetBuffer0);
209 
210  // Buffer should become available after release
211  auto packetBuffer2 = bufferManager.Reserve(128, reservedSize2);
212 
213  BOOST_TEST(reservedSize2 == 128);
214  BOOST_TEST(packetBuffer2.get());
215 }

◆ BOOST_AUTO_TEST_CASE() [10/11]

BOOST_AUTO_TEST_CASE ( BufferCommitTest  )

Definition at line 217 of file BufferTests.cpp.

References BufferManager::Commit(), BufferManager::GetReadableBuffer(), and BufferManager::Reserve().

218 {
219  BufferManager bufferManager(2, 512);
220  unsigned int reservedSize0 = 0;
221  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
222 
223  BOOST_TEST(reservedSize0 == 512);
224  BOOST_TEST(packetBuffer0.get());
225 
226  unsigned int reservedSize1 = 0;
227  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
228 
229  BOOST_TEST(reservedSize1 == 128);
230  BOOST_TEST(packetBuffer1.get());
231 
232  unsigned int reservedSize2 = 0;
233  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
234  BOOST_TEST(reservedSize2 == 0);
235  BOOST_TEST(!reservedBuffer.get());
236 
237  bufferManager.Commit(packetBuffer0, 256);
238 
239  // Buffer should become readable after commit
240  auto packetBuffer2 = bufferManager.GetReadableBuffer();
241  BOOST_TEST(packetBuffer2.get());
242  BOOST_TEST(packetBuffer2->GetSize() == 256);
243 
244  // Buffer not set back to available list after commit
245  unsigned int reservedSize = 0;
246  reservedBuffer = bufferManager.Reserve(512, reservedSize);
247  BOOST_TEST(reservedSize == 0);
248  BOOST_TEST(!reservedBuffer.get());
249 }

◆ BOOST_AUTO_TEST_CASE() [11/11]

BOOST_AUTO_TEST_CASE ( BufferMarkReadTest  )

Definition at line 251 of file BufferTests.cpp.

References BOOST_AUTO_TEST_SUITE_END(), BufferManager::Commit(), BufferManager::GetReadableBuffer(), BufferManager::MarkRead(), and BufferManager::Reserve().

252 {
253  BufferManager bufferManager(2, 512);
254  unsigned int reservedSize0 = 0;
255  auto packetBuffer0 = bufferManager.Reserve(512, reservedSize0);
256 
257  BOOST_TEST(reservedSize0 == 512);
258  BOOST_TEST(packetBuffer0.get());
259 
260  unsigned int reservedSize1 = 0;
261  auto packetBuffer1 = bufferManager.Reserve(128, reservedSize1);
262 
263  BOOST_TEST(reservedSize1 == 128);
264  BOOST_TEST(packetBuffer1.get());
265 
266  // Cannot reserve when buffer is not available
267  unsigned int reservedSize2 = 0;
268  auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
269  BOOST_TEST(reservedSize2 == 0);
270  BOOST_TEST(!reservedBuffer.get());
271 
272  bufferManager.Commit(packetBuffer0, 256);
273 
274  // Buffer should become readable after commit
275  auto packetBuffer2 = bufferManager.GetReadableBuffer();
276  BOOST_TEST(packetBuffer2.get());
277  BOOST_TEST(packetBuffer2->GetSize() == 256);
278 
279  // Buffer not set back to available list after commit
280  reservedBuffer = bufferManager.Reserve(512, reservedSize2);
281  BOOST_TEST(reservedSize2 == 0);
282  BOOST_TEST(!reservedBuffer.get());
283 
284  bufferManager.MarkRead(packetBuffer2);
285 
286  //Buffer should set back to available list after marked read and can be reserved
287  auto readBuffer = bufferManager.GetReadableBuffer();
288  BOOST_TEST(!readBuffer);
289  unsigned int reservedSize3 = 0;
290  auto packetBuffer3 = bufferManager.Reserve(56, reservedSize3);
291 
292  BOOST_TEST(reservedSize3 == 56);
293  BOOST_TEST(packetBuffer3.get());
294 }