File: test_gcreftracer.py

package info (click to toggle)
pypy 5.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 97,040 kB
  • ctags: 185,069
  • sloc: python: 1,147,862; ansic: 49,642; cpp: 5,245; asm: 5,169; makefile: 529; sh: 481; xml: 232; lisp: 45
file content (53 lines) | stat: -rw-r--r-- 1,800 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
from rpython.jit.backend.llsupport.gcreftracer import GCREFTRACER, gcrefs_trace
from rpython.jit.backend.llsupport.gcreftracer import make_framework_tracer
from rpython.jit.backend.llsupport.gcreftracer import make_boehm_tracer


class FakeGC:
    def __init__(self):
        self.called = []
    def _trace_callback(self, callback, arg, addr):
        assert callback == "callback"
        assert arg == "arg"
        assert lltype.typeOf(addr) == llmemory.Address
        self.called.append(addr)


def test_gcreftracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    a[0] = 123
    a[1] = 456
    a[2] = 789
    tr = lltype.malloc(GCREFTRACER)
    tr.array_base_addr = base = rffi.cast(lltype.Signed, a)
    tr.array_length = 3
    gc = FakeGC()
    gcrefs_trace(gc, llmemory.cast_ptr_to_adr(tr), "callback", "arg")
    assert len(gc.called) == 3
    WORD = rffi.sizeof(lltype.Signed)
    for i in range(3):
        assert gc.called[i] == rffi.cast(llmemory.Address, base + i * WORD)
    lltype.free(a, flavor='raw')

def test_make_framework_tracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    base = rffi.cast(lltype.Signed, a)
    tr = make_framework_tracer(base, [123, 456, 789])
    assert a[0] == 123
    assert a[1] == 456
    assert a[2] == 789
    assert tr.array_base_addr == base
    assert tr.array_length == 3
    lltype.free(a, flavor='raw')

def test_make_boehm_tracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    base = rffi.cast(lltype.Signed, a)
    lst = [123, 456, 789]
    tr = make_boehm_tracer(base, lst)
    assert a[0] == 123
    assert a[1] == 456
    assert a[2] == 789
    assert tr is lst
    lltype.free(a, flavor='raw')