[pypy-svn] r13618 - pypy/dist/pypy/translator/goal
arigo at codespeak.net
arigo at codespeak.net
Mon Jun 20 14:48:18 CEST 2005
Author: arigo
Date: Mon Jun 20 14:48:16 2005
New Revision: 13618
Modified:
pypy/dist/pypy/translator/goal/targetrpystone2.py
Log:
Checking that rpystone2 appears to do its job: the global variables are the
same after running it through GenC than after running it over Python.
Modified: pypy/dist/pypy/translator/goal/targetrpystone2.py
==============================================================================
--- pypy/dist/pypy/translator/goal/targetrpystone2.py (original)
+++ pypy/dist/pypy/translator/goal/targetrpystone2.py Mon Jun 20 14:48:16 2005
@@ -1,6 +1,7 @@
import buildcache2
from pypy.objspace.std.objspace import StdObjSpace
from pypy.translator.test import rpystone
+from pypy.translator.c.symboltable import getsymboltable
# __________ Entry point __________
@@ -9,7 +10,7 @@
rpystone.setslow(False)
def entry_point():
- return rpystone.pystones(LOOPS)
+ return rpystone.pystones(LOOPS), id(rpystone.g)
# _____ Define and setup target _____
def target():
@@ -19,7 +20,7 @@
def run(c_entry_point):
res = c_entry_point()
- benchtime, stones = res
+ (benchtime, stones), g_addr = res
print "translated rpystone.pystones/fast time for %d passes = %g" % \
(LOOPS, benchtime)
print "This machine benchmarks at %g translated rpystone/fast pystones/second" % stones
@@ -28,8 +29,54 @@
print "rpystone.pystones/fast time for %d passes = %g" % \
(50000, benchtime)
print "This machine benchmarks at %g rpystone/fast pystones/second" % stones
+ symtable = getsymboltable(c_entry_point.__module__)
+ check_g_results(symtable, g_addr)
+def check_g_results(symtable, g_addr):
+ try:
+ g_ptr = symtable[g_addr]
+ except KeyError:
+ print "No low-level equivalent of structure 'g' found."
+ else:
+ assert g_ptr.inst_BoolGlob == rpystone.g.BoolGlob
+ assert g_ptr.inst_Char1Glob == rpystone.g.Char1Glob
+ assert g_ptr.inst_Char2Glob == rpystone.g.Char2Glob
+ compare_array_of_array(g_ptr.inst_Array2Glob, rpystone.g.Array2Glob)
+ compare_record(g_ptr.inst_PtrGlb, rpystone.g.PtrGlb)
+ compare_record(g_ptr.inst_PtrGlbNext, rpystone.g.PtrGlbNext)
+
+
+def compare_array_of_array(array, pylist):
+ assert len(array.items) == len(pylist)
+ for i in range(len(pylist)):
+ x1 = array.items[i]
+ x2 = pylist[i]
+ compare_array(x1, x2)
+
+def compare_array(array, pylist):
+ assert len(array.items) == len(pylist)
+ for i in range(len(pylist)):
+ x1 = array.items[i]
+ x2 = pylist[i]
+ assert x1 == x2
+
+def compare_record(struct, pyrecord):
+ if pyrecord is None:
+ assert not struct
+ else:
+ assert struct
+ compare_record(struct.inst_PtrComp, pyrecord.PtrComp)
+ assert struct.inst_Discr == pyrecord.Discr
+ assert struct.inst_EnumComp == pyrecord.EnumComp
+ assert struct.inst_IntComp == pyrecord.IntComp
+ compare_string(struct.inst_StringComp, pyrecord.StringComp)
+
+def compare_string(str, pystr):
+ assert len(str.chars) == len(pystr)
+ for i in range(len(pystr)):
+ assert str.chars[i] == pystr[i]
+
#if __name__ == "__main__":
# # just run it without translation
# LOOPS = 50000
More information about the Pypy-commit
mailing list