7 #include "mc/mc_page_store.h"
11 static void new_content(void* data, size_t size)
13 memset(data, ++value, size);
16 static void* getpage()
18 return mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
21 int main(int argc, char** argv)
24 size_t pagesize = (size_t) getpagesize();
25 mc_pages_store_t store = new s_mc_pages_store(500);
26 void* data = getpage();
29 xbt_assert(store->size()==0, "Bad size");
31 // Store the page once:
32 new_content(data, pagesize);
33 size_t pageno1 = store->store_page(data);
34 xbt_assert(store->get_ref(pageno1)==1, "Bad refcount");
35 const void* copy = store->get_page(pageno1);
36 xbt_assert(memcmp(data, copy, pagesize)==0, "Page data should be the same");
37 xbt_assert(store->size()==1, "Bad size");
39 // Store the same page again:
40 size_t pageno2 = store->store_page(data);
41 xbt_assert(pageno1==pageno2, "Page should be the same");
42 xbt_assert(store->get_ref(pageno1)==2, "Bad refcount");
43 xbt_assert(store->size()==1, "Bad size");
46 new_content(data, pagesize);
47 size_t pageno3 = store->store_page(data);
48 xbt_assert(pageno1 != pageno3, "New page should be different");
49 xbt_assert(store->size()==2, "Bad size");
52 store->unref_page(pageno1);
53 xbt_assert(store->get_ref(pageno1)==1, "Bad refcount");
54 xbt_assert(store->size()==2, "Bad size");
55 store->unref_page(pageno2);
56 xbt_assert(store->size()==1, "Bad size");
59 new_content(data, pagesize);
60 size_t pageno4 = store->store_page(data);
61 xbt_assert(pageno1 == pageno4, "Page was not reused");
62 xbt_assert(store->get_ref(pageno4)==1, "Bad refcount");
63 xbt_assert(store->size()==2, "Bad size");