X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/db1df4b379b3e088b50f6e573ba9b0887b59c96a..e63c67321577f0816604fe730cd0bc856970454d:/src/mc/sosp/PageStore_test.cpp diff --git a/src/mc/sosp/PageStore_test.cpp b/src/mc/sosp/PageStore_test.cpp index d4b5954ce9..99ff03aef3 100644 --- a/src/mc/sosp/PageStore_test.cpp +++ b/src/mc/sosp/PageStore_test.cpp @@ -1,11 +1,9 @@ -/* Copyright (c) 2015-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#define BOOST_TEST_MODULE PAGESTORE -#define BOOST_TEST_DYN_LINK -#include +#include "src/include/catch.hpp" #include #include @@ -22,15 +20,15 @@ using simgrid::mc::PageStore; /***********************************/ // a class to hold the variable used in the test cases -class BOOST_tests { +class helper_tests { public: static std::size_t pagesize; static std::unique_ptr store; static void* data; - static size_t pageno1, pageno2, pageno3, pageno4; + static size_t pageno[4]; static int value; -public: // member functions used by the test suite(s) + // member functions used by the test suite(s) static void Init(); static void store_page_once(); static void store_same_page(); @@ -38,112 +36,90 @@ public: // member functions used by the test suite(s) static void unref_pages(); static void reallocate_page(); - static void new_content(void* data, std::size_t size); - static void* getpage(); + static void new_content(void* buf, std::size_t size); }; -// static member datat initialization -std::size_t BOOST_tests::pagesize = 0; -std::unique_ptr BOOST_tests::store = nullptr; -void* BOOST_tests::data = nullptr; -size_t BOOST_tests::pageno1 = 0; -size_t BOOST_tests::pageno2 = 0; -size_t BOOST_tests::pageno3 = 0; -size_t BOOST_tests::pageno4 = 0; -int BOOST_tests::value = 0; - -void BOOST_tests::Init() +// static member data initialization +std::size_t helper_tests::pagesize = 0; +std::unique_ptr helper_tests::store = nullptr; +void* helper_tests::data = nullptr; +size_t helper_tests::pageno[4] = {0, 0, 0, 0}; +int helper_tests::value = 0; + +void helper_tests::Init() { pagesize = (size_t)getpagesize(); - store = std::unique_ptr(new simgrid::mc::PageStore(500)); - data = getpage(); - BOOST_CHECK_MESSAGE(store->size() == 0, "Bad size"); + store = std::make_unique(50); + data = mmap(nullptr, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + REQUIRE(store->size() == 0); } -void BOOST_tests::store_page_once() +void helper_tests::store_page_once() { new_content(data, pagesize); - pageno1 = store->store_page(data); - BOOST_CHECK_MESSAGE(store->get_ref(pageno1) == 1, "Bad refcount"); - const void* copy = store->get_page(pageno1); - BOOST_CHECK_MESSAGE(::memcmp(data, copy, pagesize) == 0, "Page data should be the same"); - BOOST_CHECK_MESSAGE(store->size() == 1, "Bad size"); + pageno[0] = store->store_page(data); + REQUIRE(store->get_ref(pageno[0]) == 1); + const void* copy = store->get_page(pageno[0]); + REQUIRE(::memcmp(data, copy, pagesize) == 0); // The page data should be the same + REQUIRE(store->size() == 1); } -void BOOST_tests::store_same_page() +void helper_tests::store_same_page() { - pageno2 = store->store_page(data); - BOOST_CHECK_MESSAGE(pageno1 == pageno2, "Page should be the same"); - BOOST_CHECK_MESSAGE(store->get_ref(pageno1) == 2, "Bad refcount"); - BOOST_CHECK_MESSAGE(store->size() == 1, "Bad size"); + 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); } -void BOOST_tests::store_new_page() +void helper_tests::store_new_page() { new_content(data, pagesize); - pageno3 = store->store_page(data); - BOOST_CHECK_MESSAGE(pageno1 != pageno3, "New page should be different"); - BOOST_CHECK_MESSAGE(store->size() == 2, "Bad size"); + pageno[2] = store->store_page(data); + REQUIRE(pageno[0] != pageno[2]); // The new page should be different + REQUIRE(store->size() == 2); } -void BOOST_tests::unref_pages() +void helper_tests::unref_pages() { - store->unref_page(pageno1); - BOOST_CHECK_MESSAGE(store->get_ref(pageno1) == 1, "Bad refcount"); - BOOST_CHECK_MESSAGE(store->size() == 2, "Bad size"); - store->unref_page(pageno2); - BOOST_CHECK_MESSAGE(store->size() == 1, "Bad size"); + 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); } -void BOOST_tests::reallocate_page() +void helper_tests::reallocate_page() { new_content(data, pagesize); - pageno4 = store->store_page(data); - BOOST_CHECK_MESSAGE(pageno1 == pageno4, "Page was not reused"); - BOOST_CHECK_MESSAGE(store->get_ref(pageno4) == 1, "Bad refcount"); - BOOST_CHECK_MESSAGE(store->size() == 2, "Bad size"); + 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); } -void BOOST_tests::new_content(void* data, std::size_t size) +void helper_tests::new_content(void* buf, std::size_t size) { - ::memset(data, ++value, size); + value++; + ::memset(buf, value, size); } -void* BOOST_tests::getpage() +TEST_CASE("MC page store, used during checkpoint", "MC::PageStore") { - return mmap(nullptr, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -} + helper_tests::Init(); + INFO("Store page once"); + helper_tests::store_page_once(); -namespace utf = boost::unit_test; // for test case dependence + INFO("Store the same page"); + helper_tests::store_same_page(); -BOOST_AUTO_TEST_SUITE(PAGESTORE) -BOOST_AUTO_TEST_CASE(Init) -{ - BOOST_tests::Init(); -} + INFO("Store a new page"); + helper_tests::store_new_page(); -BOOST_AUTO_TEST_CASE(store_page_once, *utf::depends_on("PAGESTORE/Init")) -{ - BOOST_tests::store_page_once(); -} + INFO("Unref pages"); + helper_tests::unref_pages(); -BOOST_AUTO_TEST_CASE(store_same_page, *utf::depends_on("PAGESTORE/store_page_once")) -{ - BOOST_tests::store_same_page(); -} - -BOOST_AUTO_TEST_CASE(store_new_page, *utf::depends_on("PAGESTORE/store_same_page")) -{ - BOOST_tests::store_new_page(); -} - -BOOST_AUTO_TEST_CASE(unref_pages, *utf::depends_on("PAGESTORE/store_new_page")) -{ - BOOST_tests::unref_pages(); -} - -BOOST_AUTO_TEST_CASE(reallocate_page, *utf::depends_on("PAGESTORE/unref_pages")) -{ - BOOST_tests::reallocate_page(); + INFO("Reallocate pages"); + helper_tests::reallocate_page(); } -BOOST_AUTO_TEST_SUITE_END()