mirror of
https://github.com/python/cpython.git
synced 2024-12-14 04:17:19 +08:00
805365ee39
svn+ssh://pythondev@svn.python.org/python/branches/p3yk ........ r55077 | guido.van.rossum | 2007-05-02 11:54:37 -0700 (Wed, 02 May 2007) | 2 lines Use the new print syntax, at least. ........ r55142 | fred.drake | 2007-05-04 21:27:30 -0700 (Fri, 04 May 2007) | 1 line remove old cruftiness ........ r55143 | fred.drake | 2007-05-04 21:52:16 -0700 (Fri, 04 May 2007) | 1 line make this work with the new Python ........ r55162 | neal.norwitz | 2007-05-06 22:29:18 -0700 (Sun, 06 May 2007) | 1 line Get asdl code gen working with Python 2.3. Should continue to work with 3.0 ........ r55164 | neal.norwitz | 2007-05-07 00:00:38 -0700 (Mon, 07 May 2007) | 1 line Verify checkins to p3yk (sic) branch go to 3000 list. ........ r55166 | neal.norwitz | 2007-05-07 00:12:35 -0700 (Mon, 07 May 2007) | 1 line Fix this test so it runs again by importing warnings_test properly. ........ r55167 | neal.norwitz | 2007-05-07 01:03:22 -0700 (Mon, 07 May 2007) | 8 lines So long xrange. range() now supports values that are outside -sys.maxint to sys.maxint. floats raise a TypeError. This has been sitting for a long time. It probably has some problems and needs cleanup. Objects/rangeobject.c now uses 4-space indents since it is almost completely new. ........ r55171 | guido.van.rossum | 2007-05-07 10:21:26 -0700 (Mon, 07 May 2007) | 4 lines Fix two tests that were previously depending on significant spaces at the end of a line (and before that on Python 2.x print behavior that has no exact equivalent in 3.0). ........
88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
# It's intended that this script be run by hand. It runs speed tests on
|
|
# hashlib functions; it does not test for correctness.
|
|
|
|
import sys, time
|
|
import hashlib
|
|
|
|
|
|
def creatorFunc():
|
|
raise RuntimeError, "eek, creatorFunc not overridden"
|
|
|
|
def test_scaled_msg(scale, name):
|
|
iterations = 106201/scale * 20
|
|
longStr = 'Z'*scale
|
|
|
|
localCF = creatorFunc
|
|
start = time.time()
|
|
for f in range(iterations):
|
|
x = localCF(longStr).digest()
|
|
end = time.time()
|
|
|
|
print(('%2.2f' % (end-start)), "seconds", iterations, "x", len(longStr), "bytes", name)
|
|
|
|
def test_create():
|
|
start = time.time()
|
|
for f in range(20000):
|
|
d = creatorFunc()
|
|
end = time.time()
|
|
|
|
print(('%2.2f' % (end-start)), "seconds", '[20000 creations]')
|
|
|
|
def test_zero():
|
|
start = time.time()
|
|
for f in range(20000):
|
|
x = creatorFunc().digest()
|
|
end = time.time()
|
|
|
|
print(('%2.2f' % (end-start)), "seconds", '[20000 "" digests]')
|
|
|
|
|
|
|
|
hName = sys.argv[1]
|
|
|
|
#
|
|
# setup our creatorFunc to test the requested hash
|
|
#
|
|
if hName in ('_md5', '_sha'):
|
|
exec('import '+hName)
|
|
exec('creatorFunc = '+hName+'.new')
|
|
print("testing speed of old", hName, "legacy interface")
|
|
elif hName == '_hashlib' and len(sys.argv) > 3:
|
|
import _hashlib
|
|
exec('creatorFunc = _hashlib.%s' % sys.argv[2])
|
|
print("testing speed of _hashlib.%s" % sys.argv[2], getattr(_hashlib, sys.argv[2]))
|
|
elif hName == '_hashlib' and len(sys.argv) == 3:
|
|
import _hashlib
|
|
exec('creatorFunc = lambda x=_hashlib.new : x(%r)' % sys.argv[2])
|
|
print("testing speed of _hashlib.new(%r)" % sys.argv[2])
|
|
elif hasattr(hashlib, hName) and callable(getattr(hashlib, hName)):
|
|
creatorFunc = getattr(hashlib, hName)
|
|
print("testing speed of hashlib."+hName, getattr(hashlib, hName))
|
|
else:
|
|
exec("creatorFunc = lambda x=hashlib.new : x(%r)" % hName)
|
|
print("testing speed of hashlib.new(%r)" % hName)
|
|
|
|
try:
|
|
test_create()
|
|
except ValueError:
|
|
print()
|
|
print("pass argument(s) naming the hash to run a speed test on:")
|
|
print(" '_md5' and '_sha' test the legacy builtin md5 and sha")
|
|
print(" '_hashlib' 'openssl_hName' 'fast' tests the builtin _hashlib")
|
|
print(" '_hashlib' 'hName' tests builtin _hashlib.new(shaFOO)")
|
|
print(" 'hName' tests the hashlib.hName() implementation if it exists")
|
|
print(" otherwise it uses hashlib.new(hName).")
|
|
print()
|
|
raise
|
|
|
|
test_zero()
|
|
test_scaled_msg(scale=106201, name='[huge data]')
|
|
test_scaled_msg(scale=10620, name='[large data]')
|
|
test_scaled_msg(scale=1062, name='[medium data]')
|
|
test_scaled_msg(scale=424, name='[4*small data]')
|
|
test_scaled_msg(scale=336, name='[3*small data]')
|
|
test_scaled_msg(scale=212, name='[2*small data]')
|
|
test_scaled_msg(scale=106, name='[small data]')
|
|
test_scaled_msg(scale=creatorFunc().digest_size, name='[digest_size data]')
|
|
test_scaled_msg(scale=10, name='[tiny data]')
|