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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
from rpython.annotator import model as annmodel, annrpython
from rpython.flowspace.model import Constant
from rpython.rtyper import rmodel
from rpython.rtyper.lltypesystem.lltype import Signed, Void
from rpython.rtyper.rtyper import RPythonTyper
from rpython.rtyper.test.test_llinterp import interpret
from rpython.translator.translator import TranslationContext, graphof
def test_reprkeys_dont_clash():
stup1 = annmodel.SomeTuple((annmodel.SomeFloat(),
annmodel.SomeInteger()))
stup2 = annmodel.SomeTuple((annmodel.SomeString(),
annmodel.SomeInteger()))
key1 = stup1.rtyper_makekey()
key2 = stup2.rtyper_makekey()
assert key1 != key2
def test_simple():
def dummyfn(x):
return x+1
res = interpret(dummyfn, [7])
assert res == 8
def test_function_call():
def g(x, y):
return x-y
def f(x):
return g(1, x)
res = interpret(f, [4])
assert res == -3
def test_retval():
def f(x):
return x
t = TranslationContext()
t.buildannotator().build_types(f, [int])
t.buildrtyper().specialize()
#t.view()
t.checkgraphs()
graph = graphof(t, f)
assert graph.getreturnvar().concretetype == Signed
assert graph.startblock.exits[0].args[0].concretetype == Signed
def test_retval_None():
def f(x):
pass
t = TranslationContext()
t.buildannotator().build_types(f, [int])
t.buildrtyper().specialize()
#t.view()
t.checkgraphs()
graph = graphof(t, f)
assert graph.getreturnvar().concretetype == Void
assert graph.startblock.exits[0].args[0].concretetype == Void
def test_ll_calling_ll():
import test_llann
tst = test_llann.TestLowLevelAnnotateTestCase()
a, vTs = tst.test_ll_calling_ll()
rt = RPythonTyper(a)
rt.specialize()
assert [vT.concretetype for vT in vTs] == [Void] * 4
def test_ll_calling_ll2():
import test_llann
tst = test_llann.TestLowLevelAnnotateTestCase()
a, vTs = tst.test_ll_calling_ll2()
rt = RPythonTyper(a)
rt.specialize()
assert [vT.concretetype for vT in vTs] == [Void] * 3
def test_getgcflavor():
class A:
pass
class B:
_alloc_flavor_ = "gc"
class R:
_alloc_flavor_ = "raw"
class DummyClsDescDef:
def __init__(self, cls):
self._cls = cls
self.classdesc = self
self.basedef = None
def getmro(self):
return [self]
def get_param(self, name, default=None, inherit=True):
return getattr(self._cls, name, default)
assert rmodel.getgcflavor(DummyClsDescDef(A)) == 'gc'
assert rmodel.getgcflavor(DummyClsDescDef(B)) == 'gc'
assert rmodel.getgcflavor(DummyClsDescDef(R)) == 'raw'
|