[pypy-svn] r26077 - pypy/dist/pypy/translator/js/test
ericvrp at codespeak.net
ericvrp at codespeak.net
Fri Apr 21 11:00:31 CEST 2006
Author: ericvrp
Date: Fri Apr 21 11:00:20 2006
New Revision: 26077
Added:
pypy/dist/pypy/translator/js/test/test_symbolic.py (contents, props changed)
Log:
Added symbolic tests (taken from llvm).
All but one test is still skipped though.
Added: pypy/dist/pypy/translator/js/test/test_symbolic.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/js/test/test_symbolic.py Fri Apr 21 11:00:20 2006
@@ -0,0 +1,99 @@
+import py
+from pypy.translator.interactive import Translation
+from pypy import conftest
+from pypy.rpython.lltypesystem import llmemory, lltype
+from pypy.rpython.memory import lladdress
+from pypy.rpython.objectmodel import ComputedIntSymbolic
+
+from pypy.translator.js.test.runtest import compile_function
+
+def test_computed_int_symbolic():
+ def compute_fn():
+ return 7
+ k = ComputedIntSymbolic(compute_fn)
+ def f():
+ return k*6
+
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 42
+
+def test_offsetof():
+ py.test.skip("symbolic/address support is in progress")
+ STRUCT = lltype.GcStruct("s", ("x", lltype.Signed), ("y", lltype.Signed))
+ offsetx = llmemory.offsetof(STRUCT, 'x')
+ offsety = llmemory.offsetof(STRUCT, 'y')
+ def f():
+ s = lltype.malloc(STRUCT)
+ s.x = 1
+ adr = llmemory.cast_ptr_to_adr(s)
+ result = (adr + offsetx).signed[0]
+ (adr + offsety).signed[0] = 2
+ return result * 10 + s.y
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 12
+
+def test_sizeof_array_with_no_length():
+ py.test.skip("inprogress")
+ A = lltype.GcArray(lltype.Signed, hints={'nolength': True})
+ a = lltype.malloc(A, 5)
+
+ arraysize = llmemory.itemoffsetof(A, 10)
+ signedsize = llmemory.sizeof(lltype.Signed)
+ def f():
+ return a[0] + arraysize-signedsize*10
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 0
+
+def test_itemoffsetof():
+ py.test.skip("symbolic/address support is in progress")
+ ARRAY = lltype.GcArray(lltype.Signed)
+ itemoffsets = [llmemory.itemoffsetof(ARRAY, i) for i in range(5)]
+ def f():
+ a = lltype.malloc(ARRAY, 5)
+ adr = llmemory.cast_ptr_to_adr(a)
+ result = 0
+ for i in range(5):
+ a[i] = i + 1
+ for i in range(5):
+ result = result * 10 + (adr + itemoffsets[i]).signed[0]
+ for i in range(5):
+ (adr + itemoffsets[i]).signed[0] = i
+ for i in range(5):
+ result = 10 * result + a[i]
+ return result
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 1234501234
+
+def test_sizeof_constsize_struct():
+ py.test.skip("symbolic/address support is in progress")
+ # _not_ a GcStruct, since we want to raw_malloc it
+ STRUCT = lltype.Struct("s", ("x", lltype.Signed), ("y", lltype.Signed))
+ STRUCTPTR = lltype.Ptr(STRUCT)
+ sizeofs = llmemory.sizeof(STRUCT)
+ offsety = llmemory.offsetof(STRUCT, 'y')
+ def f():
+ adr = lladdress.raw_malloc(sizeofs)
+ s = llmemory.cast_adr_to_ptr(adr, STRUCTPTR)
+ s.y = 5 # does not crash
+ result = (adr + offsety).signed[0] * 10 + int(offsety < sizeofs)
+ lladdress.raw_free(adr)
+ return result
+
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 51
+
+def test_computed_int_symbolic():
+ def compute_fn():
+ return 7
+ k = ComputedIntSymbolic(compute_fn)
+ def f():
+ return k*6
+
+ fn = compile_function(f, [])
+ res = fn()
+ assert res == 42
More information about the Pypy-commit
mailing list