mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
move test into a unittest.TestCase, no functional changes
This commit is contained in:
parent
f06e30af4a
commit
a98e7694ee
1 changed files with 76 additions and 76 deletions
|
|
@ -1,7 +1,9 @@
|
|||
from test.test_support import verbose
|
||||
from test import test_support
|
||||
import random
|
||||
from UserList import UserList
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
verbose = test_support.verbose
|
||||
nerrors = 0
|
||||
|
||||
def check(tag, expected, raw, compare=None):
|
||||
|
|
@ -36,91 +38,88 @@ def check(tag, expected, raw, compare=None):
|
|||
nerrors += 1
|
||||
return
|
||||
|
||||
# Try a variety of sizes at and around powers of 2, and at powers of 10.
|
||||
sizes = [0]
|
||||
for power in range(1, 10):
|
||||
n = 2 ** power
|
||||
sizes.extend(range(n-1, n+2))
|
||||
sizes.extend([10, 100, 1000])
|
||||
class TestBase(unittest.TestCase):
|
||||
def testStressfully(self):
|
||||
# Try a variety of sizes at and around powers of 2, and at powers of 10.
|
||||
sizes = [0]
|
||||
for power in range(1, 10):
|
||||
n = 2 ** power
|
||||
sizes.extend(range(n-1, n+2))
|
||||
sizes.extend([10, 100, 1000])
|
||||
|
||||
class Complains(object):
|
||||
maybe_complain = True
|
||||
class Complains(object):
|
||||
maybe_complain = True
|
||||
|
||||
def __init__(self, i):
|
||||
self.i = i
|
||||
def __init__(self, i):
|
||||
self.i = i
|
||||
|
||||
def __lt__(self, other):
|
||||
if Complains.maybe_complain and random.random() < 0.001:
|
||||
def __lt__(self, other):
|
||||
if Complains.maybe_complain and random.random() < 0.001:
|
||||
if verbose:
|
||||
print " complaining at", self, other
|
||||
raise RuntimeError
|
||||
return self.i < other.i
|
||||
|
||||
def __repr__(self):
|
||||
return "Complains(%d)" % self.i
|
||||
|
||||
class Stable(object):
|
||||
def __init__(self, key, i):
|
||||
self.key = key
|
||||
self.index = i
|
||||
|
||||
def __cmp__(self, other):
|
||||
return cmp(self.key, other.key)
|
||||
|
||||
def __repr__(self):
|
||||
return "Stable(%d, %d)" % (self.key, self.index)
|
||||
|
||||
for n in sizes:
|
||||
x = range(n)
|
||||
if verbose:
|
||||
print " complaining at", self, other
|
||||
raise RuntimeError
|
||||
return self.i < other.i
|
||||
print "Testing size", n
|
||||
|
||||
def __repr__(self):
|
||||
return "Complains(%d)" % self.i
|
||||
s = x[:]
|
||||
check("identity", x, s)
|
||||
|
||||
class Stable(object):
|
||||
def __init__(self, key, i):
|
||||
self.key = key
|
||||
self.index = i
|
||||
s = x[:]
|
||||
s.reverse()
|
||||
check("reversed", x, s)
|
||||
|
||||
def __cmp__(self, other):
|
||||
return cmp(self.key, other.key)
|
||||
s = x[:]
|
||||
random.shuffle(s)
|
||||
check("random permutation", x, s)
|
||||
|
||||
def __repr__(self):
|
||||
return "Stable(%d, %d)" % (self.key, self.index)
|
||||
y = x[:]
|
||||
y.reverse()
|
||||
s = x[:]
|
||||
check("reversed via function", y, s, lambda a, b: cmp(b, a))
|
||||
|
||||
for n in sizes:
|
||||
x = range(n)
|
||||
if verbose:
|
||||
print "Testing size", n
|
||||
if verbose:
|
||||
print " Checking against an insane comparison function."
|
||||
print " If the implementation isn't careful, this may segfault."
|
||||
s = x[:]
|
||||
s.sort(lambda a, b: int(random.random() * 3) - 1)
|
||||
check("an insane function left some permutation", x, s)
|
||||
|
||||
s = x[:]
|
||||
check("identity", x, s)
|
||||
x = [Complains(i) for i in x]
|
||||
s = x[:]
|
||||
random.shuffle(s)
|
||||
Complains.maybe_complain = True
|
||||
it_complained = False
|
||||
try:
|
||||
s.sort()
|
||||
except RuntimeError:
|
||||
it_complained = True
|
||||
if it_complained:
|
||||
Complains.maybe_complain = False
|
||||
check("exception during sort left some permutation", x, s)
|
||||
|
||||
s = x[:]
|
||||
s.reverse()
|
||||
check("reversed", x, s)
|
||||
|
||||
s = x[:]
|
||||
random.shuffle(s)
|
||||
check("random permutation", x, s)
|
||||
|
||||
y = x[:]
|
||||
y.reverse()
|
||||
s = x[:]
|
||||
check("reversed via function", y, s, lambda a, b: cmp(b, a))
|
||||
|
||||
if verbose:
|
||||
print " Checking against an insane comparison function."
|
||||
print " If the implementation isn't careful, this may segfault."
|
||||
s = x[:]
|
||||
s.sort(lambda a, b: int(random.random() * 3) - 1)
|
||||
check("an insane function left some permutation", x, s)
|
||||
|
||||
x = [Complains(i) for i in x]
|
||||
s = x[:]
|
||||
random.shuffle(s)
|
||||
Complains.maybe_complain = True
|
||||
it_complained = False
|
||||
try:
|
||||
s.sort()
|
||||
except RuntimeError:
|
||||
it_complained = True
|
||||
if it_complained:
|
||||
Complains.maybe_complain = False
|
||||
check("exception during sort left some permutation", x, s)
|
||||
|
||||
s = [Stable(random.randrange(10), i) for i in xrange(n)]
|
||||
augmented = [(e, e.index) for e in s]
|
||||
augmented.sort() # forced stable because ties broken by index
|
||||
x = [e for e, i in augmented] # a stable sort of s
|
||||
check("stability", x, s)
|
||||
|
||||
|
||||
import unittest
|
||||
from test import test_support
|
||||
import sys
|
||||
s = [Stable(random.randrange(10), i) for i in xrange(n)]
|
||||
augmented = [(e, e.index) for e in s]
|
||||
augmented.sort() # forced stable because ties broken by index
|
||||
x = [e for e, i in augmented] # a stable sort of s
|
||||
check("stability", x, s)
|
||||
|
||||
#==============================================================================
|
||||
|
||||
|
|
@ -269,6 +268,7 @@ def test_reverse_stability(self):
|
|||
|
||||
def test_main(verbose=None):
|
||||
test_classes = (
|
||||
TestBase,
|
||||
TestDecorateSortUndecorate,
|
||||
TestBugs,
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue