diff --git a/persistent-data/space_map_core.h b/persistent-data/space_map_core.h index 05e8c32..700b8e6 100644 --- a/persistent-data/space_map_core.h +++ b/persistent-data/space_map_core.h @@ -24,8 +24,10 @@ //---------------------------------------------------------------- namespace persistent_data { - class core_map : public space_map { + class core_map : public checked_space_map { public: + typedef boost::shared_ptr ptr; + core_map(block_address nr_blocks) : counts_(nr_blocks, 0), nr_free_(nr_blocks) { @@ -93,6 +95,20 @@ namespace persistent_data { throw std::runtime_error("not implemented"); } + // FIXME: meaningless, but this class is only used for testing + size_t root_size() const { + return 0; + } + + // FIXME: meaningless, but this class is only used for testing + virtual void copy_root(void *dest, size_t len) const { + throw std::runtime_error("not implemented"); + } + + checked_space_map::ptr clone() const { + return ptr(new core_map(*this)); + } + private: std::vector counts_; unsigned nr_free_; diff --git a/persistent-data/space_map_transactional.h b/persistent-data/space_map_transactional.h index 635059d..cec8c97 100644 --- a/persistent-data/space_map_transactional.h +++ b/persistent-data/space_map_transactional.h @@ -24,7 +24,7 @@ //---------------------------------------------------------------- namespace persistent_data { - + // FIXME: change name 'transactional' is so vague. // This space map ensures no blocks are allocated which have been diff --git a/unit-tests/space_map_t.cc b/unit-tests/space_map_t.cc index fce97f6..d663128 100644 --- a/unit-tests/space_map_t.cc +++ b/unit-tests/space_map_t.cc @@ -18,6 +18,7 @@ #include "persistent-data/space_map_disk.h" #include "persistent-data/space_map_core.h" +#include "persistent-data/space_map_transactional.h" #define BOOST_TEST_MODULE SpaceMapDiskTests #include @@ -37,7 +38,7 @@ namespace { create_tm() { block_manager<>::ptr bm( new block_manager<>("./test.data", NR_BLOCKS, MAX_LOCKS, true)); - space_map::ptr sm(new core_map(1024)); + space_map::ptr sm(new core_map(NR_BLOCKS)); transaction_manager::ptr tm( new transaction_manager(bm, sm)); return tm; @@ -51,6 +52,16 @@ namespace { } }; + class sm_transactional_creator { + public: + static space_map::ptr + create() { + return create_transactional_sm( + checked_space_map::ptr( + new core_map(NR_BLOCKS))); + } + }; + class sm_disk_creator { public: static persistent_space_map::ptr @@ -248,6 +259,11 @@ BOOST_AUTO_TEST_CASE(test_sm_core) do_tests(space_map_tests); } +BOOST_AUTO_TEST_CASE(test_sm_transactional) +{ + do_tests(space_map_tests); +} + BOOST_AUTO_TEST_CASE(test_sm_disk) { do_tests(space_map_tests);