diff options
author | Guido van Rossum <guido@python.org> | 1998-05-10 18:20:05 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-05-10 18:20:05 (GMT) |
commit | ea176b663e79dd8660f7faaeaef0eda45d2ce301 (patch) | |
tree | e602a6e414db484b04ed0ba33c08a056af14574e /Lib/test/sortperf.py | |
parent | 1e162d3753528ef25885f20106512599ebad9b0b (diff) | |
download | cpython-ea176b663e79dd8660f7faaeaef0eda45d2ce301.zip cpython-ea176b663e79dd8660f7faaeaef0eda45d2ce301.tar.gz cpython-ea176b663e79dd8660f7faaeaef0eda45d2ce301.tar.bz2 |
benchmark for list.sort()
Diffstat (limited to 'Lib/test/sortperf.py')
-rw-r--r-- | Lib/test/sortperf.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Lib/test/sortperf.py b/Lib/test/sortperf.py new file mode 100644 index 0000000..5d9232a --- /dev/null +++ b/Lib/test/sortperf.py @@ -0,0 +1,109 @@ +"""Sort performance test.""" + +import sys +import time +import whrandom +import marshal +import tempfile +import operator +import os + +td = tempfile.gettempdir() + +def randrange(n): + """Return a random shuffle of range(n).""" + fn = os.path.join(td, "rr%06d" % n) + try: + fp = open(fn, "rb") + except IOError: + result = [] + for i in range(n): + result.append(whrandom.random()) + try: + try: + fp = open(fn, "wb") + marshal.dump(result, fp) + fp.close() + fp = None + finally: + if fp: + try: + os.unlink(fn) + except os.error: + pass + except IOError, msg: + print "can't write", fn, ":", msg + else: + result = marshal.load(fp) + fp.close() + ##assert len(result) == n + # Shuffle it a bit... + for i in range(10): + i = whrandom.randint(0, n-1) + temp = result[:i] + del result[:i] + temp.reverse() + result[len(result):] = temp + del temp + return result + +def fl(): + sys.stdout.flush() + +def doit(L): + t0 = time.clock() + L.sort() + t1 = time.clock() + print "%6.2f" % (t1-t0), + fl() + +def tabulate(r): + fmt = ("%2s %6s" + " %6s"*5) + print fmt % ("i", "2**i", "*sort", "\\sort", "/sort", "~sort", "-sort") + for i in r: + n = 1<<i + L = randrange(n) + ##assert len(L) == n + print "%2d %6d" % (i, n), + fl() + doit(L) # *sort + L.reverse() + doit(L) # \sort + doit(L) # /sort + if n > 4: + L = map(operator.neg, map(operator.neg, L[:4]*(n/4))) + doit(L) # ~sort + L = map(abs, [-0.5]*n) + doit(L) # -sort + print + +def main(): + import string + # default range (inclusive) + k1 = 15 + k2 = 19 + # one argument: single point + # two arguments: specify range + if sys.argv[1:]: + k1 = string.atoi(sys.argv[1]) + k2 = k1 + if sys.argv[2:]: + k2 = string.atoi(sys.argv[2]) + if sys.argv[3:]: + # derive random seed from remaining arguments + x, y, z = 0, 0, 0 + for a in sys.argv[3:]: + h = hash(a) + h, d = divmod(h, 256) + h = h & 0xffffff + x = (x^h^d) & 255 + h = h>>8 + y = (y^h^d) & 255 + h = h>>8 + z = (z^h^d) & 255 + whrandom.seed(x, y, z) + r = range(k1, k2+1) + tabulate(r) + +if __name__ == '__main__': + main() |