buffer_t.cc: more tests

This commit is contained in:
Heinz Mauelshagen 2013-01-23 14:32:03 +01:00
parent 0f5fc39694
commit ca7de05e62
2 changed files with 14 additions and 6 deletions

View File

@ -32,19 +32,19 @@
//----------------------------------------------------------------
namespace persistent_data {
// Joe has buffer<> in other parts of the code, so...
uint32_t const DEFAULT_BUFFER_SIZE = 4096;
// Allocate buffer of Size with Alignment imposed.
//
// Allocation needs to be on the heap in order to provide alignment guarantees!
// Allocation needs to be on the heap in order to provide alignment
// guarantees.
//
// Alignment must be a power of two.
template <uint32_t Size = DEFAULT_BUFFER_SIZE, uint32_t Alignment = 512>
class buffer : private boost::noncopyable {
public:
typedef boost::shared_ptr<buffer> ptr;
typedef boost::shared_ptr<buffer const> const_ptr;
unsigned char &operator[](unsigned index) {
check_index(index);

View File

@ -82,12 +82,20 @@ BOOST_AUTO_TEST_CASE(buffer_8_a_8_access)
BOOST_CHECK_EQUAL((*b)[0], '\0');
}
BOOST_AUTO_TEST_CASE(buffer_8_a_8_oob)
{
uint32_t const sz = 8, align = 8;
buffer<sz, align>::ptr b = create_buffer<sz, align>();
BOOST_CHECK_NO_THROW((*b)[8] = 0);
}
BOOST_AUTO_TEST_CASE(buffer_8_a_8_const_access)
{
uint32_t const sz = 8, align = 8;
buffer<sz, align>::ptr const b = create_buffer<sz, align>();
buffer<sz, align>::const_ptr b = create_buffer<sz, align>();
(*b)[0] = 0; // Compile time error accessing read-only location
// (*b)[0] = 0; // Compile time error accessing read-only location
}
// 8 byte buffer size, varying alignment from 1 - 7