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). ........
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
import unittest
|
|
from test import test_support, seq_tests
|
|
|
|
class TupleTest(seq_tests.CommonTest):
|
|
type2test = tuple
|
|
|
|
def test_constructors(self):
|
|
super(TupleTest, self).test_len()
|
|
# calling built-in types without argument must return empty
|
|
self.assertEqual(tuple(), ())
|
|
|
|
def test_truth(self):
|
|
super(TupleTest, self).test_truth()
|
|
self.assert_(not ())
|
|
self.assert_((42, ))
|
|
|
|
def test_len(self):
|
|
super(TupleTest, self).test_len()
|
|
self.assertEqual(len(()), 0)
|
|
self.assertEqual(len((0,)), 1)
|
|
self.assertEqual(len((0, 1, 2)), 3)
|
|
|
|
def test_iadd(self):
|
|
super(TupleTest, self).test_iadd()
|
|
u = (0, 1)
|
|
u2 = u
|
|
u += (2, 3)
|
|
self.assert_(u is not u2)
|
|
|
|
def test_imul(self):
|
|
super(TupleTest, self).test_imul()
|
|
u = (0, 1)
|
|
u2 = u
|
|
u *= 3
|
|
self.assert_(u is not u2)
|
|
|
|
def test_tupleresizebug(self):
|
|
# Check that a specific bug in _PyTuple_Resize() is squashed.
|
|
def f():
|
|
for i in range(1000):
|
|
yield i
|
|
self.assertEqual(list(tuple(f())), list(range(1000)))
|
|
|
|
def test_hash(self):
|
|
# See SF bug 942952: Weakness in tuple hash
|
|
# The hash should:
|
|
# be non-commutative
|
|
# should spread-out closely spaced values
|
|
# should not exhibit cancellation in tuples like (x,(x,y))
|
|
# should be distinct from element hashes: hash(x)!=hash((x,))
|
|
# This test exercises those cases.
|
|
# For a pure random hash and N=50, the expected number of occupied
|
|
# buckets when tossing 252,600 balls into 2**32 buckets
|
|
# is 252,592.6, or about 7.4 expected collisions. The
|
|
# standard deviation is 2.73. On a box with 64-bit hash
|
|
# codes, no collisions are expected. Here we accept no
|
|
# more than 15 collisions. Any worse and the hash function
|
|
# is sorely suspect.
|
|
|
|
N=50
|
|
base = list(range(N))
|
|
xp = [(i, j) for i in base for j in base]
|
|
inps = base + [(i, j) for i in base for j in xp] + \
|
|
[(i, j) for i in xp for j in base] + xp + list(zip(base))
|
|
collisions = len(inps) - len(set(map(hash, inps)))
|
|
self.assert_(collisions <= 15)
|
|
|
|
def test_repr(self):
|
|
l0 = tuple()
|
|
l2 = (0, 1, 2)
|
|
a0 = self.type2test(l0)
|
|
a2 = self.type2test(l2)
|
|
|
|
self.assertEqual(str(a0), repr(l0))
|
|
self.assertEqual(str(a2), repr(l2))
|
|
self.assertEqual(repr(a0), "()")
|
|
self.assertEqual(repr(a2), "(0, 1, 2)")
|
|
|
|
def test_main():
|
|
test_support.run_unittest(TupleTest)
|
|
|
|
if __name__=="__main__":
|
|
test_main()
|