[Python-checkins] python/nondist/sandbox/parrotbench b0.py, 1.1,
1.2 out0, 1.1, 1.2
gvanrossum at users.sourceforge.net
gvanrossum at users.sourceforge.net
Tue Dec 30 11:28:29 EST 2003
Update of /cvsroot/python/python/nondist/sandbox/parrotbench
In directory sc8-pr-cvs1:/tmp/cvs-serv31809
Modified Files:
b0.py out0
Log Message:
New version. Better approach to self-checking and debugging.
Index: b0.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/parrotbench/b0.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** b0.py 30 Dec 2003 06:12:57 -0000 1.1
--- b0.py 30 Dec 2003 16:28:25 -0000 1.2
***************
*** 1,5 ****
! def check(b, msg=None):
! if not b:
! raise AssertionError(msg)
def proto___new__(cls, name):
--- 1,7 ----
! def check(a, b):
! if not a == b:
! print (a, b)
! if __debug__:
! raise AssertionError("%r != %r" % (a, b))
def proto___new__(cls, name):
***************
*** 35,40 ****
OPERATOR = Token('OPERATOR')
- ##print INDENT, DEDENT
-
class Scanner(object):
--- 37,40 ----
***************
*** 176,179 ****
--- 176,180 ----
d, d1 = a//b, a1//b1
def strhash(s):
+ # Python 2.x string hash algorithm
if s == '':
return 0
***************
*** 191,195 ****
L.append(pair)
L2 = list(it2)
! check(L == L2)
operators = {
--- 192,196 ----
L.append(pair)
L2 = list(it2)
! check(L, L2)
operators = {
***************
*** 265,269 ****
self.globals = globals
def __call__(self, *args):
! check(len(args) == len(self.args))
locals = dict(zip(self.args, args))
try:
--- 266,270 ----
self.globals = globals
def __call__(self, *args):
! check(len(args), len(self.args))
locals = dict(zip(self.args, args))
try:
***************
*** 274,278 ****
class Generator(Function):
def __call__(self, *args):
! check(len(args) == len(self.args))
locals = dict(zip(self.args, args))
try:
--- 275,279 ----
class Generator(Function):
def __call__(self, *args):
! check(len(args), len(self.args))
locals = dict(zip(self.args, args))
try:
***************
*** 523,527 ****
def nexttoken(self):
self.token, self.value = rv = self.scanner.next()
- ##print rv
return rv
def expect(self, token, value=None):
--- 524,527 ----
***************
*** 675,686 ****
root = parser.parse()
indent = ""
! def writeln(s):
! print s
def instrumentClass(cls):
for name in cls.__dict__:
descr = getattr(cls, name)
if hasattr(descr, '__get__'):
! setattr(cls, name, instrumentDescriptor(name, descr))
class instrumentDescriptor(object):
def __init__(self, name, obj):
--- 675,728 ----
root = parser.parse()
+ class List(list):
+ __setitem__ = list.__setitem__
+ __getitem__ = list.__getitem__
+
+ class Str(str):
+ __getitem__ = str.__getitem__
+
+ class OutputFile(object):
+ data = []
+ def write(self, s):
+ self.data.append(s)
+ def getvalue(self):
+ r = "".join(self.data)
+ self.data = List()
+ return r
+
+ output = OutputFile()
+ def write(s):
+ s = str(s)
+ i = s.find(' at 0x')
+ while i > 0:
+ j = s.find('>', i+6)
+ if j < 0:
+ break
+ digits = s[i+4:j]
+ try:
+ number = int(digits, 0)
+ except ValueError:
+ break
+ else:
+ s = s[:i+5] + s[j:]
+ i = s.find(' at 0x')
+ if __debug__:
+ print s,
+ print >>output, s,
+ def writeln(s=''):
+ write(str(s) + '\n')
indent = ""
! OutputFile.softspace = True
def instrumentClass(cls):
+ cname = cls.__name__ + '.'
for name in cls.__dict__:
descr = getattr(cls, name)
if hasattr(descr, '__get__'):
! setattr(cls, name, instrumentDescriptor(cname+name, descr))
! def unInstrumentClass(cls):
! for name in cls.__dict__:
! descr = getattr(cls, name)
! if isinstance(descr, instrumentDescriptor):
! setattr(cls, name, descr.obj)
class instrumentDescriptor(object):
def __init__(self, name, obj):
***************
*** 725,737 ****
instrumentClass(Parser)
root = parser.parse()
- env = {}
- eval(root, env, env)
- g = env['pi']()
- for i in range(1000):
- print g.next(),
- print
- strhash = env['strhash']
! def myhash(s):
if not s:
return 0
--- 767,772 ----
instrumentClass(Parser)
root = parser.parse()
! def myhash(s, ord=ord):
if not s:
return 0
***************
*** 741,748 ****
return x^len(s)
for x in '', 'x', 'abc', 'abc'*100:
! a, b, c = strhash(x), myhash(x), hash(x) & 0xffffffffL
! if a == b == c:
! print a
! else:
! print a, b, c
--- 776,854 ----
return x^len(s)
+ def checkoutput(n=0):
+ outputtext = output.getvalue()
+ check(strhash(outputtext), n)
+
+ strhash = myhash
+
+ checkoutput(1365277872)
+
+ env = {}
+ eval(root, env, env)
+ g = env['pi']()
+ for i in range(1000):
+ write(g.next())
+ writeln('')
+ strhash = env['strhash']
+
for x in '', 'x', 'abc', 'abc'*100:
! check(strhash(x), myhash(x))
!
! strhash = myhash
! checkoutput(3960406533)
!
! ##unInstrumentClass(Parser)
! it = Clone(getcFromString(unicode(sample, "utf8")))
! it2 = Clone(it)
! scanner = Scanner(it.next).tokenize()
! parser = Parser(scanner)
! root = parser.parse()
! checkoutput(2293472643)
! env = {}
! eval(root, env, env)
! g = env['pi']()
! for i in range(1000):
! write(g.next())
! writeln()
! checkoutput(3960406533)
!
! def instrumentTree(base):
! instrumentClass(base)
! for cls in base.__subclasses__():
! instrumentTree(cls)
! def unInstrumentTree(base):
! unInstrumentClass(base)
! for cls in base.__subclasses__():
! unInstrumentTree(cls)
!
! instrumentTree(Node)
! scanner = Clone(Scanner(it2.next).tokenize())
! scanner2 = Clone(scanner)
! parser = Parser(scanner)
! root = parser.parse()
! env = {}
! eval(root, env, env)
! g = env['pi']()
! for i in range(10):
! write(g.next())
! writeln()
! out = output.getvalue()
!
! unInstrumentTree(Node)
! unInstrumentClass(Parser)
! parser = Parser(scanner2)
! root = parser.parse()
! env = {}
! eval(root, env, env)
! g = env['pi']()
! for i in range(10):
! write(g.next())
! writeln()
! out2 = output.getvalue()
! check(out, out2)
! check(strhash(out[:1000]), 773700721)
! check(strhash(out[100000:101000]), 3131788725)
! check(strhash(out[200000:201000]), 3508888315)
! check(strhash(out[300000:301000]), 199799004)
! check(strhash(out[400000:401000]), 84251599)
! check(strhash(out[-1000:]), 620844360)
Index: out0
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/parrotbench/out0,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** out0 30 Dec 2003 06:12:57 -0000 1.1
--- out0 30 Dec 2003 16:28:25 -0000 1.2
***************
*** 1,42 ****
! parse()
! parse_stmt()
! parse_def()
! expect(NAME, 'def')
! nexttoken()
return (NAME, 'pi')
return 'def'
! expect(NAME)
! nexttoken()
return (OPERATOR, '(')
[...16941 lines suppressed...]
! Exprs.assign((3L, 3L), {u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 4L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! Name.assign(3L, {u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 4L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return
! Name.assign(3L, {u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return
! return
! return
! While.geneval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return <generator object at 0>
! Binop.eval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! Name.eval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return 3L
! Name.eval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return 3L
! return True
! Yield.geneval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return <generator object at 0>
! Name.eval({u'strhash': <__main__.Function object at 0>, u'pi': <__main__.Generator object at 0>}, {u'a': 9576126383040000L, u'q': 29, u'b': 2742857884166400L, u'd': 3L, u'k': 15, u'a1': 346367486707200000L, u'p': 196, u'b1': 96034297911552000L, u'd1': 3L})
! return 3L
! 3
More information about the Python-checkins
mailing list