X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d70dfdd9e81b40b680fe3896d814cb967f95f253..a957c8903c9dd13041a0902b130f0e6543388ca2:/src/mc/snapshot/unitTest/mc_snapshot_unit.cpp diff --git a/src/mc/snapshot/unitTest/mc_snapshot_unit.cpp b/src/mc/snapshot/unitTest/mc_snapshot_unit.cpp index e359c6146d..edb4cd343a 100644 --- a/src/mc/snapshot/unitTest/mc_snapshot_unit.cpp +++ b/src/mc/snapshot/unitTest/mc_snapshot_unit.cpp @@ -17,90 +17,223 @@ #include "src/mc/mc_private.hpp" #include "src/mc/mc_snapshot.hpp" +/**************** Class BOOST_tests *************************/ +using simgrid::mc::RegionSnapshot; +class BOOST_tests { + public: + static void init_memory(void* mem, size_t size); + static void Init(bool sparse_ckpt); + typedef struct { + size_t size; + void* src; + void* dstn; + RegionSnapshot region0; + RegionSnapshot region; + } prologue_return; + static prologue_return prologue(int n); // common to the below 5 fxs + static void read_whole_region(); + static void read_region_parts(); + static void compare_whole_region(); + static void compare_region_parts(); + static void read_pointer(); + + static void cleanup() { + delete mc_model_checker; + mc_model_checker = nullptr; + } + + public: + static bool sparse_checkpoint; + static std::unique_ptr process; +}; -static inline void init_memory(void* mem, size_t size) -{ +// static member variables init. +bool BOOST_tests::sparse_checkpoint = 0; +std::unique_ptr BOOST_tests::process = nullptr; + +void +BOOST_tests::init_memory(void* mem, size_t size) { char* dest = (char*) mem; for (size_t i = 0; i < size; ++i) { dest[i] = rand() & 255; } } -static int test_snapshot(bool sparse_checkpoint); - -BOOST_AUTO_TEST_SUITE(Snapshots) -BOOST_AUTO_TEST_CASE(flat_snapshots) { - BOOST_CHECK_EQUAL(test_snapshot(0), 1); -} -BOOST_AUTO_TEST_CASE(page_snapshots) { - BOOST_CHECK_EQUAL(test_snapshot(1), 1); -} -BOOST_AUTO_TEST_SUITE_END() - -static int test_snapshot(bool sparse_checkpoint) { - - _sg_mc_sparse_checkpoint = sparse_checkpoint; +void +BOOST_tests::Init(bool sparse_ckpt) { + _sg_mc_sparse_checkpoint = sparse_ckpt; BOOST_CHECK_EQUAL(xbt_pagesize, getpagesize()); BOOST_CHECK_EQUAL(1 << xbt_pagebits, xbt_pagesize); - std::unique_ptr process(new simgrid::mc::RemoteClient(getpid(), -1)); + process = std::unique_ptr(new simgrid::mc::RemoteClient(getpid(), -1)); process->init(); mc_model_checker = new ::simgrid::mc::ModelChecker(std::move(process)); +} + + +BOOST_tests::prologue_return BOOST_tests::prologue(int n) { + // Store region page(s): + size_t byte_size = n * xbt_pagesize; + void* source = mmap(nullptr, byte_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + BOOST_CHECK_MESSAGE(source!=MAP_FAILED, "Could not allocate source memory"); + + // Init memory and take snapshots: + init_memory(source, byte_size); + simgrid::mc::RegionSnapshot region0 = simgrid::mc::sparse_region( + simgrid::mc::RegionType::Unknown, source, source, byte_size); + for(int i=0; i