lib-python.2.5.test.time_hashlib.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
# 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 xrange(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 xrange(20000):
d = creatorFunc()
end = time.time()
print ('%2.2f' % (end-start)), "seconds", '[20000 creations]'
def test_zero():
start = time.time()
for f in xrange(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]')