annotate Lib/test/sortperf.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents 45b4fc63bf67
children 6b18a095c2e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
1 """Sort performance test.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
2
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
3 See main() for command line syntax.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
4 See tabulate() for output format.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
5
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
6 """
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 import sys
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 import time
22933
32a9b19dba1d Use random instead of whrandom
Andrew M. Kuchling <amk@amk.ca>
parents: 16517
diff changeset
10 import random
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 import marshal
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 import tempfile
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 import os
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 td = tempfile.gettempdir()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
17 def randfloats(n):
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
18 """Return a list of n random floats in [0, 1)."""
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
19 # Generating floats is expensive, so this writes them out to a file in
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
20 # a temp directory. If the file already exists, it just reads them
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
21 # back in and shuffles them a bit.
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 fn = os.path.join(td, "rr%06d" % n)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 try:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 fp = open(fn, "rb")
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 except IOError:
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
26 r = random.random
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
27 result = [r() for i in xrange(n)]
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 try:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 try:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 fp = open(fn, "wb")
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 marshal.dump(result, fp)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 fp.close()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 fp = None
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 finally:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 if fp:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 try:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 os.unlink(fn)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 except os.error:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 pass
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 except IOError, msg:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 print "can't write", fn, ":", msg
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 else:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 result = marshal.load(fp)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 fp.close()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 # Shuffle it a bit...
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 for i in range(10):
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
47 i = random.randrange(n)
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 temp = result[:i]
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 del result[:i]
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 temp.reverse()
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
51 result.extend(temp)
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 del temp
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
53 assert len(result) == n
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 return result
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
55
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
56 def flush():
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 sys.stdout.flush()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 def doit(L):
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 t0 = time.clock()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 L.sort()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 t1 = time.clock()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 print "%6.2f" % (t1-t0),
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
64 flush()
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 def tabulate(r):
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
67 """Tabulate sort speed for lists of various sizes.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
68
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
69 The sizes are 2**i for i in r (the argument, a list).
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
70
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
71 The output displays i, 2**i, and the time to sort arrays of 2**i
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
72 floating point numbers with the following properties:
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
73
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
74 *sort: random data
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
75 \sort: descending data
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
76 /sort: ascending data
24346
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
77 3sort: ascending, then 3 random exchanges
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
78 +sort: ascending, then 10 random at the end
24472
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
79 %sort: ascending, then randomly replace 1% of the elements w/ random values
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
80 ~sort: many duplicates
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
81 =sort: all equal
8427
e96e3d387611 Add Tim's worst case scenario.
Guido van Rossum <guido@python.org>
parents: 8394
diff changeset
82 !sort: worst case scenario
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
83
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
84 """
24472
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
85 cases = tuple([ch + "sort" for ch in r"*\/3+%~=!"])
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
86 fmt = ("%2s %7s" + " %6s"*len(cases))
8427
e96e3d387611 Add Tim's worst case scenario.
Guido van Rossum <guido@python.org>
parents: 8394
diff changeset
87 print fmt % (("i", "2**i") + cases)
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 for i in r:
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
89 n = 1 << i
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
90 L = randfloats(n)
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
91 print "%2d %7d" % (i, n),
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
92 flush()
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 doit(L) # *sort
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 L.reverse()
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 doit(L) # \sort
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 doit(L) # /sort
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
97
24341
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
98 # Do 3 random exchanges.
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
99 for dummy in range(3):
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
100 i1 = random.randrange(n)
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
101 i2 = random.randrange(n)
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
102 L[i1], L[i2] = L[i2], L[i1]
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
103 doit(L) # 3sort
3ef019caad1e Added new test "3sort". This is sorted data but with 3 random exchanges.
Tim Peters <tim.peters@gmail.com>
parents: 24292
diff changeset
104
24346
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
105 # Replace the last 10 with random floats.
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
106 if n >= 10:
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
107 L[-10:] = [random.random() for dummy in range(10)]
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
108 doit(L) # +sort
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
109
24472
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
110 # Replace 1% of the elements at random.
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
111 for dummy in xrange(n // 100):
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
112 L[random.randrange(n)] = random.random()
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
113 doit(L) # %sort
45b4fc63bf67 New test %sort. This takes a sorted list, picks 1% of the list positions
Tim Peters <tim.peters@gmail.com>
parents: 24346
diff changeset
114
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
115 # Arrange for lots of duplicates.
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 if n > 4:
8311
f4fc9d18a53d Reduce memory requirements.
Guido van Rossum <guido@python.org>
parents: 8289
diff changeset
117 del L[4:]
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
118 L = L * (n // 4)
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
119 # Force the elements to be distinct objects, else timings can be
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
120 # artificially low.
8311
f4fc9d18a53d Reduce memory requirements.
Guido van Rossum <guido@python.org>
parents: 8289
diff changeset
121 L = map(lambda x: --x, L)
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 doit(L) # ~sort
8311
f4fc9d18a53d Reduce memory requirements.
Guido van Rossum <guido@python.org>
parents: 8289
diff changeset
123 del L
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
124
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
125 # All equal. Again, force the elements to be distinct objects.
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
126 L = map(abs, [-0.5] * n)
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
127 doit(L) # =sort
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
128 del L
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
129
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
130 # This one looks like [3, 2, 1, 0, 0, 1, 2, 3]. It was a bad case
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
131 # for an older implementation of quicksort, which used the median
24346
2dc23f0f3421 New test "+sort", tacking 10 random floats on to the end of a sorted
Tim Peters <tim.peters@gmail.com>
parents: 24341
diff changeset
132 # of the first, last and middle elements as the pivot.
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
133 half = n // 2
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
134 L = range(half - 1, -1, -1)
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
135 L.extend(range(half))
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
136 # Force to float, so that the timings are comparable. This is
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
137 # significantly faster if we leave tham as ints.
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
138 L = map(float, L)
8427
e96e3d387611 Add Tim's worst case scenario.
Guido van Rossum <guido@python.org>
parents: 8394
diff changeset
139 doit(L) # !sort
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 print
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 def main():
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
143 """Main program when invoked as a script.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
144
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
145 One argument: tabulate a single row.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
146 Two arguments: tabulate a range (inclusive).
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
147 Extra arguments are used to seed the random generator.
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
148
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
149 """
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 # default range (inclusive)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 k1 = 15
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
152 k2 = 20
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 if sys.argv[1:]:
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
154 # one argument: single point
16517
eee67a84e5fa String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 8427
diff changeset
155 k1 = k2 = int(sys.argv[1])
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 if sys.argv[2:]:
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
157 # two arguments: specify range
16517
eee67a84e5fa String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 8427
diff changeset
158 k2 = int(sys.argv[2])
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 if sys.argv[3:]:
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 # derive random seed from remaining arguments
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
161 x = 1
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 for a in sys.argv[3:]:
24292
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
163 x = 69069 * x + hash(a)
2d407484a4e6 Gave this a facelift: "/" vs "//", whrandom vs random, etc. Boosted
Tim Peters <tim.peters@gmail.com>
parents: 22933
diff changeset
164 random.seed(x)
8289
9281b5d35641 Add a few doc strings.
Guido van Rossum <guido@python.org>
parents: 8288
diff changeset
165 r = range(k1, k2+1) # include the end point
8288
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 tabulate(r)
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
167
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 if __name__ == '__main__':
6ed8a7ffc595 benchmark for list.sort()
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 main()