Esempio n. 1
0
/**
 * Test getting / setting IOVec work.
 */
void IOQueueTest::testIOVec() {
  uint8_t data1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

  m_buffer->Write(data1, sizeof(data1));
  OLA_ASSERT_EQ(9u, m_buffer->Size());
  OLA_ASSERT_FALSE(m_buffer->Empty());

  int iocnt;
  const struct IOVec *vector = m_buffer->AsIOVec(&iocnt);
  OLA_ASSERT_EQ(9u, SumLengthOfIOVec(vector, iocnt));
  OLA_ASSERT_EQ(1, iocnt);
  m_buffer->FreeIOVec(vector);

  // try a smaller block size
  MemoryBlockPool pool(4);
  IOQueue queue(&pool);
  m_buffer.reset(new IOQueue(&pool));
  queue.Write(data1, sizeof(data1));
  OLA_ASSERT_EQ(9u, queue.Size());

  vector = queue.AsIOVec(&iocnt);
  OLA_ASSERT_EQ(3, iocnt);
  OLA_ASSERT_EQ(9u, SumLengthOfIOVec(vector, iocnt));
  queue.FreeIOVec(vector);
}