fixup tests following the stricter block checking

This commit is contained in:
Joe Thornber 2011-07-22 16:32:47 +01:00
parent a683979585
commit 5c66593d11
4 changed files with 38 additions and 14 deletions

View File

@ -112,9 +112,10 @@ block_manager<BlockSize>::write_lock_zero(block_address location)
buffer buf;
zero_buffer(buf);
register_lock(location, WRITE_LOCK);
typename block::ptr b(new block(location, buf, lock_count_, ordinary_count_),
bind(&block_manager<BlockSize>::write_release, this, _1));
register_lock(location, WRITE_LOCK);
return write_ref(b);
}

View File

@ -92,7 +92,6 @@ BOOST_AUTO_TEST_CASE(different_block_sizes)
BOOST_CHECK_EQUAL(sizeof(rr.data()), 4096);
}
{
block_manager<64 * 1024> bm("./test.data", 64);
auto rr = bm.read_lock(0);

View File

@ -11,7 +11,7 @@ using namespace persistent_data;
//----------------------------------------------------------------
namespace {
block_address const NR_BLOCKS = 1023;
block_address const NR_BLOCKS = 10237;
block_address const SUPERBLOCK = 0;
unsigned const BLOCK_SIZE = 4096;
@ -105,4 +105,18 @@ BOOST_AUTO_TEST_CASE(test_set_count)
BOOST_CHECK_EQUAL(sm->get_count(43), 5);
}
BOOST_AUTO_TEST_CASE(test_set_effects_nr_allocated)
{
auto sm = create_sm_disk();
for (unsigned i = 0; i < NR_BLOCKS; i++) {
sm->set_count(i, 1);
BOOST_CHECK_EQUAL(sm->get_nr_free(), NR_BLOCKS - i - 1);
}
for (unsigned i = 0; i < NR_BLOCKS; i++) {
sm->set_count(i, 0);
BOOST_CHECK_EQUAL(sm->get_nr_free(), i + 1);
}
}
//----------------------------------------------------------------

View File

@ -18,6 +18,7 @@ namespace {
block_manager<4096>::ptr bm(new block_manager<4096>("./test.data", NR_BLOCKS));
space_map::ptr sm(new core_map(NR_BLOCKS));
transaction_manager<4096>::ptr tm(new transaction_manager<4096>(bm, sm));
tm->get_sm()->inc(0);
return tm;
}
}
@ -37,20 +38,29 @@ BOOST_AUTO_TEST_CASE(shadowing)
auto sm = tm->get_sm();
sm->inc(1);
auto p = tm->shadow(1);
auto b = p.first.get_location();
BOOST_CHECK(b != 1);
BOOST_CHECK(!p.second);
BOOST_CHECK(sm->get_count(1) == 0);
block_address b;
p = tm->shadow(b);
BOOST_CHECK(p.first.get_location() == b);
BOOST_CHECK(!p.second);
{
auto p = tm->shadow(1);
b = p.first.get_location();
BOOST_CHECK(b != 1);
BOOST_CHECK(!p.second);
BOOST_CHECK(sm->get_count(1) == 0);
}
{
auto p = tm->shadow(b);
BOOST_CHECK(p.first.get_location() == b);
BOOST_CHECK(!p.second);
}
sm->inc(b);
p = tm->shadow(b);
BOOST_CHECK(p.first.get_location() != b);
BOOST_CHECK(p.second);
{
auto p = tm->shadow(b);
BOOST_CHECK(p.first.get_location() != b);
BOOST_CHECK(p.second);
}
}
BOOST_AUTO_TEST_CASE(multiple_shadowing)