mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	svn+ssh://pythondev@svn.python.org/python/trunk ........ r60990 | eric.smith | 2008-02-23 17:05:26 +0100 (Sat, 23 Feb 2008) | 1 line Removed duplicate Py_CHARMASK define. It's already defined in Python.h. ........ r60991 | andrew.kuchling | 2008-02-23 17:23:05 +0100 (Sat, 23 Feb 2008) | 4 lines #1330538: Improve comparison of xmlrpclib.DateTime and datetime instances. Remove automatic handling of datetime.date and datetime.time. This breaks backward compatibility, but python-dev discussion was strongly against this automatic conversion; see the bug for a link. ........ r60994 | andrew.kuchling | 2008-02-23 17:39:43 +0100 (Sat, 23 Feb 2008) | 1 line #835521: Add index entries for various pickle-protocol methods and attributes ........ r60995 | andrew.kuchling | 2008-02-23 18:10:46 +0100 (Sat, 23 Feb 2008) | 2 lines #1433694: minidom's .normalize() failed to set .nextSibling for last element. Fix by Malte Helmert ........ r61000 | christian.heimes | 2008-02-23 18:40:11 +0100 (Sat, 23 Feb 2008) | 1 line Patch #2167 from calvin: Remove unused imports ........ r61001 | christian.heimes | 2008-02-23 18:42:31 +0100 (Sat, 23 Feb 2008) | 1 line Patch #1957: syslogmodule: Release GIL when calling syslog(3) ........ r61002 | christian.heimes | 2008-02-23 18:52:07 +0100 (Sat, 23 Feb 2008) | 2 lines Issue #2051 and patch from Alexander Belopolsky: Permission for pyc and pyo files are inherited from the py file. ........
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from test import test_support, seq_tests
 | 
						|
 | 
						|
class TupleTest(seq_tests.CommonTest):
 | 
						|
    type2test = tuple
 | 
						|
 | 
						|
    def test_constructors(self):
 | 
						|
        super().test_len()
 | 
						|
        # calling built-in types without argument must return empty
 | 
						|
        self.assertEqual(tuple(), ())
 | 
						|
 | 
						|
    def test_truth(self):
 | 
						|
        super().test_truth()
 | 
						|
        self.assert_(not ())
 | 
						|
        self.assert_((42, ))
 | 
						|
 | 
						|
    def test_len(self):
 | 
						|
        super().test_len()
 | 
						|
        self.assertEqual(len(()), 0)
 | 
						|
        self.assertEqual(len((0,)), 1)
 | 
						|
        self.assertEqual(len((0, 1, 2)), 3)
 | 
						|
 | 
						|
    def test_iadd(self):
 | 
						|
        super().test_iadd()
 | 
						|
        u = (0, 1)
 | 
						|
        u2 = u
 | 
						|
        u += (2, 3)
 | 
						|
        self.assert_(u is not u2)
 | 
						|
 | 
						|
    def test_imul(self):
 | 
						|
        super().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()
 |