This commit is contained in:
Joe Thornber
2013-03-14 13:13:18 +00:00
parent add23c1709
commit 12dff31358
6 changed files with 477 additions and 16 deletions

View File

@@ -153,6 +153,8 @@ BOOST_AUTO_TEST_CASE(can_create_an_empty_array)
BOOST_AUTO_TEST_CASE(read_only_array_blocks_are_possible)
{
unsigned const COUNT = 10;
block_address loc;
transaction_manager::ptr tm = create_tm();
@@ -167,22 +169,76 @@ BOOST_AUTO_TEST_CASE(read_only_array_blocks_are_possible)
BOOST_CHECK_THROW(b.get(0), runtime_error);
BOOST_CHECK_THROW(b.set(0, 12345LL), runtime_error);
b.grow(COUNT, 0);
for (unsigned i = 0; i < COUNT; i++)
b.set(i, i);
}
{
ablock64_r b = read_array_block(tm, loc);
BOOST_CHECK_EQUAL(b.nr_entries(), COUNT);
BOOST_CHECK_EQUAL(b.value_size(), sizeof(uint64_t));
BOOST_CHECK_EQUAL(b.max_entries(), (4096 - 24) / 8);
for (unsigned i = 0; i < COUNT; i++)
BOOST_CHECK_EQUAL(b.get(i), i);
}
}
BOOST_AUTO_TEST_CASE(updating_reopened_array_block)
{
unsigned const COUNT = 10;
block_address loc;
transaction_manager::ptr tm = create_tm();
{
pair<ablock64, block_address> p = new_array_block(tm);
ablock64 &b = p.first;
loc = p.second;
BOOST_CHECK_EQUAL(b.nr_entries(), 0);
BOOST_CHECK_EQUAL(b.value_size(), sizeof(uint64_t));
BOOST_CHECK_EQUAL(b.max_entries(), (4096 - 24) / 8);
BOOST_CHECK_THROW(b.get(0), runtime_error);
BOOST_CHECK_THROW(b.set(0, 12345LL), runtime_error);
// Compile time error as expected
// BOOST_CHECK_THROW(b.set(0, 12345LL), runtime_error);
b.grow(COUNT, 0);
for (unsigned i = 0; i < COUNT; i++)
b.set(i, i);
}
{
ablock64 b = open_array_block(tm, loc);
BOOST_CHECK_EQUAL(b.nr_entries(), COUNT);
BOOST_CHECK_EQUAL(b.value_size(), sizeof(uint64_t));
BOOST_CHECK_EQUAL(b.max_entries(), (4096 - 24) / 8);
for (unsigned i = 0; i < COUNT; i++)
BOOST_CHECK_EQUAL(b.get(i), i);
for (unsigned i = 0; i < COUNT; i++)
b.set(i, i + 37);
}
{
ablock64_r b = read_array_block(tm, loc);
BOOST_CHECK_EQUAL(b.nr_entries(), COUNT);
BOOST_CHECK_EQUAL(b.value_size(), sizeof(uint64_t));
BOOST_CHECK_EQUAL(b.max_entries(), (4096 - 24) / 8);
for (unsigned i = 0; i < COUNT; i++)
BOOST_CHECK_EQUAL(b.get(i), i + 37);
}
}
BOOST_AUTO_TEST_CASE(growing)
{
uint64_t default_value = 123, new_value = 234;
@@ -203,6 +259,18 @@ BOOST_AUTO_TEST_CASE(growing)
}
}
BOOST_AUTO_TEST_CASE(grow_does_not_touch_existing_values)
{
transaction_manager::ptr tm = create_tm();
pair<ablock64, block_address> p = new_array_block(tm);
ablock64 &b = p.first;
b.grow(10, 123);
BOOST_CHECK_EQUAL(b.get(9), 123);
b.grow(20, 234);
BOOST_CHECK_EQUAL(b.get(9), 123);
}
BOOST_AUTO_TEST_CASE(shrinking)
{
uint64_t default_value = 123;