[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