X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/883b4c1070099436bef001f6602492849f4db582..cd8cf3e33c5e55c7daa82efd1445475f4574eb92:/src/mc/sosp/PageStore_test.cpp diff --git a/src/mc/sosp/PageStore_test.cpp b/src/mc/sosp/PageStore_test.cpp index 05e1d72251..8de5bc98e6 100644 --- a/src/mc/sosp/PageStore_test.cpp +++ b/src/mc/sosp/PageStore_test.cpp @@ -17,110 +17,102 @@ #include "src/mc/sosp/PageStore.hpp" -using simgrid::mc::PageStore; - /***********************************/ // a class to hold the variable used in the test cases -class helper_tests { -public: - static std::size_t pagesize; - static std::unique_ptr store; - static void* data; - static std::array pageno; - static int value; +class pstore_test_helper { + const size_t pagesize = getpagesize(); + simgrid::mc::PageStore store{50}; + std::byte* data = + static_cast(mmap(nullptr, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); + std::array pageno = {0, 0, 0, 0}; + int value = 0; + + void new_content(std::byte* buf, size_t size); +public: // member functions used by the test suite(s) - static void Init(); - static void store_page_once(); - static void store_same_page(); - static void store_new_page(); - static void unref_pages(); - static void reallocate_page(); - - static void new_content(void* buf, std::size_t size); + void init(); + void store_page_once(); + void store_same_page(); + void store_new_page(); + void unref_pages(); + void reallocate_page(); }; -// static member data initialization -std::size_t helper_tests::pagesize = 0; -std::unique_ptr helper_tests::store = nullptr; -void* helper_tests::data = nullptr; -std::array helper_tests::pageno = {{0, 0, 0, 0}}; -int helper_tests::value = 0; - -void helper_tests::Init() +void pstore_test_helper::init() { - pagesize = (size_t)getpagesize(); - store = std::make_unique(50); - data = mmap(nullptr, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - REQUIRE(store->size() == 0); + REQUIRE(data != nullptr); + REQUIRE(store.size() == 0); } -void helper_tests::store_page_once() +void pstore_test_helper::store_page_once() { new_content(data, pagesize); - pageno[0] = store->store_page(data); - REQUIRE(store->get_ref(pageno[0]) == 1); - const void* copy = store->get_page(pageno[0]); + pageno[0] = store.store_page(data); + REQUIRE(store.get_ref(pageno[0]) == 1); + const auto* copy = store.get_page(pageno[0]); REQUIRE(::memcmp(data, copy, pagesize) == 0); // The page data should be the same - REQUIRE(store->size() == 1); + REQUIRE(store.size() == 1); } -void helper_tests::store_same_page() +void pstore_test_helper::store_same_page() { - pageno[1] = store->store_page(data); + pageno[1] = store.store_page(data); REQUIRE(pageno[0] == pageno[1]); // Page should be the same - REQUIRE(store->get_ref(pageno[0]) == 2); - REQUIRE(store->size() == 1); + REQUIRE(store.get_ref(pageno[0]) == 2); + REQUIRE(store.size() == 1); } -void helper_tests::store_new_page() +void pstore_test_helper::store_new_page() { new_content(data, pagesize); - pageno[2] = store->store_page(data); + pageno[2] = store.store_page(data); REQUIRE(pageno[0] != pageno[2]); // The new page should be different - REQUIRE(store->size() == 2); + REQUIRE(store.size() == 2); } -void helper_tests::unref_pages() +void pstore_test_helper::unref_pages() { - store->unref_page(pageno[0]); - REQUIRE(store->get_ref(pageno[0]) == 1); - REQUIRE(store->size() == 2); + store.unref_page(pageno[0]); + REQUIRE(store.get_ref(pageno[0]) == 1); + REQUIRE(store.size() == 2); - store->unref_page(pageno[1]); - REQUIRE(store->size() == 1); + store.unref_page(pageno[1]); + REQUIRE(store.size() == 1); } -void helper_tests::reallocate_page() +void pstore_test_helper::reallocate_page() { new_content(data, pagesize); - pageno[3] = store->store_page(data); + pageno[3] = store.store_page(data); REQUIRE(pageno[0] == pageno[3]); // The old page should be reused - REQUIRE(store->get_ref(pageno[3]) == 1); - REQUIRE(store->size() == 2); + REQUIRE(store.get_ref(pageno[3]) == 1); + REQUIRE(store.size() == 2); } -void helper_tests::new_content(void* buf, std::size_t size) +void pstore_test_helper::new_content(std::byte* buf, size_t size) { value++; - ::memset(buf, value, size); + std::fill_n(buf, size, static_cast(value)); } TEST_CASE("MC page store, used during checkpoint", "MC::PageStore") { - helper_tests::Init(); + pstore_test_helper pstore_test; + pstore_test.init(); + INFO("Store page once"); - helper_tests::store_page_once(); + pstore_test.store_page_once(); INFO("Store the same page"); - helper_tests::store_same_page(); + pstore_test.store_same_page(); INFO("Store a new page"); - helper_tests::store_new_page(); + pstore_test.store_new_page(); INFO("Unref pages"); - helper_tests::unref_pages(); + pstore_test.unref_pages(); INFO("Reallocate pages"); - helper_tests::reallocate_page(); + pstore_test.reallocate_page(); }