Author: Remi Meier <meier...@student.ethz.ch> Branch: implement-id Changeset: r228:d8b5144c17f4 Date: 2013-06-21 16:46 +0200 http://bitbucket.org/pypy/stmgc/changeset/d8b5144c17f4/
Log: add simple tests diff --git a/c4/demo_random.c b/c4/demo_random.c --- a/c4/demo_random.c +++ b/c4/demo_random.c @@ -13,7 +13,7 @@ #define NUMTHREADS 4 -#define STEPS 100000 +#define STEPS 1000000 #define NUMROOTS 10 // per thread #define PREBUILT 3 // per thread #define MAXROOTS 1000 diff --git a/c4/nursery.c b/c4/nursery.c --- a/c4/nursery.c +++ b/c4/nursery.c @@ -102,7 +102,8 @@ if (p->h_original) { /* fast path */ - fprintf(stderr, "stm_id(%p) has orig fst: %p\n", p, p->h_original); + fprintf(stderr, "stm_id(%p) has orig fst: %p\n", + p, (gcptr)p->h_original); return p->h_original; } else if (!(p->h_tid & GCFLAG_PRIVATE_FROM_PROTECTED) @@ -122,7 +123,8 @@ */ if (p->h_original) { /* maybe now? */ result = p->h_original; - fprintf(stderr, "stm_id(%p) has orig: %p\n", p, p->h_original); + fprintf(stderr, "stm_id(%p) has orig: %p\n", + p, (gcptr)p->h_original); } else if (p->h_tid & GCFLAG_OLD) { /* it must be this exact object */ @@ -141,7 +143,7 @@ result = (revision_t)B; fprintf(stderr, "stm_id(%p) young, pfp, use backup %p\n", - p, p->h_original); + p, (gcptr)p->h_original); } else { gcptr O = stmgc_duplicate_old(p); diff --git a/c4/test/support.py b/c4/test/support.py --- a/c4/test/support.py +++ b/c4/test/support.py @@ -42,6 +42,9 @@ #define PREBUILT_REVISION ... gcptr stm_allocate(size_t size, unsigned int tid); + revision_t stm_hash(gcptr); + revision_t stm_id(gcptr); + revision_t stm_pointer_equal(gcptr, gcptr); void stm_push_root(gcptr); gcptr stm_pop_root(void); void stm_set_max_aborts(int max_aborts); @@ -108,6 +111,7 @@ #define GCFLAG_NURSERY_MOVED ... #define GCFLAG_STUB ... #define GCFLAG_PRIVATE_FROM_PROTECTED ... + #define GCFLAG_HAS_ID ... #define ABRT_MANUAL ... typedef struct { ...; } page_header_t; ''') @@ -607,4 +611,10 @@ assert (r % 4) == 0 return ffi.cast("gcptr", r) +def follow_original(p): + r = p.h_original + assert (r % 4) == 0 + return ffi.cast("gcptr", r) + + nrb_protected = ffi.cast("gcptr", -1) diff --git a/c4/test/test_et.py b/c4/test/test_et.py --- a/c4/test/test_et.py +++ b/c4/test/test_et.py @@ -198,6 +198,49 @@ assert p4 == p2 assert list_of_read_objects() == [p2] + +def test_id_young_to_old(): + # move out of nursery with shadow original + p = nalloc(HDR) + assert p.h_original == 0 + pid = lib.stm_id(p) + assert p.h_tid & GCFLAG_HAS_ID + porig = follow_original(p) + assert porig.h_tid & GCFLAG_OLD + lib.stm_push_root(p) + minor_collect() + p = lib.stm_pop_root() + assert not lib.in_nursery(p) + assert pid == lib.stm_id(p) + +def test_id_private_from_protected(): + # read and write from protected + p = oalloc(HDR) + pid = lib.stm_id(p) + porig = follow_original(p) + # impl detail { + # old objects have id==itself, if not set differently + assert porig == ffi.NULL + assert ffi.cast("gcptr", pid) == p + # } + + p1 = oalloc(HDR) + p1id = lib.stm_id(p1) + p1r = lib.stm_read_barrier(p1) + assert lib.stm_id(p1r) == p1id + p1w = lib.stm_write_barrier(p1) + assert lib.stm_id(p1w) == p1id + + p2 = oalloc(HDR) + p2w = lib.stm_write_barrier(p2) + p2id = lib.stm_id(p2) + assert p2id == lib.stm_id(p2w) + # impl detail { + assert p2w.h_original == 0 + assert follow_revision(p2w).h_original == lib.stm_id(p2w) + # } + + def test_stealing_old(): p = palloc(HDR + WORD) plist = [p] _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit