blob: fb1699a13220570856f38f64bc85d6ff673d1eb1 [file] [log] [blame]
Fred Drake13634cf2000-06-29 19:17:04 +00001# test the invariant that
2# iff a==b then hash(a)==hash(b)
3#
4
Fred Drake97656a12001-05-18 21:45:35 +00005import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00006from test import support
Fred Drake13634cf2000-06-29 19:17:04 +00007
8
Fred Drake97656a12001-05-18 21:45:35 +00009class HashEqualityTestCase(unittest.TestCase):
10
11 def same_hash(self, *objlist):
Fred Drakeacb117e2001-05-18 21:50:02 +000012 # Hash each object given and fail if
13 # the hash values are not all the same.
Guido van Rossumc1f779c2007-07-03 08:25:58 +000014 hashed = list(map(hash, objlist))
Fred Drake97656a12001-05-18 21:45:35 +000015 for h in hashed[1:]:
16 if h != hashed[0]:
Walter Dörwald70a6b492004-02-12 17:35:32 +000017 self.fail("hashed values differ: %r" % (objlist,))
Fred Drake97656a12001-05-18 21:45:35 +000018
19 def test_numeric_literals(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +000020 self.same_hash(1, 1, 1.0, 1.0+0.0j)
Thomas Woutersce272b62007-09-19 21:19:28 +000021 self.same_hash(0, 0.0, 0.0+0.0j)
22 self.same_hash(-1, -1.0, -1.0+0.0j)
23 self.same_hash(-2, -2.0, -2.0+0.0j)
Fred Drake97656a12001-05-18 21:45:35 +000024
25 def test_coerced_integers(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +000026 self.same_hash(int(1), int(1), float(1), complex(1),
Fred Drake97656a12001-05-18 21:45:35 +000027 int('1'), float('1.0'))
Thomas Woutersce272b62007-09-19 21:19:28 +000028 self.same_hash(int(-2**31), float(-2**31))
29 self.same_hash(int(1-2**31), float(1-2**31))
30 self.same_hash(int(2**31-1), float(2**31-1))
31 # for 64-bit platforms
32 self.same_hash(int(2**31), float(2**31))
33 self.same_hash(int(-2**63), float(-2**63))
Fred Drake97656a12001-05-18 21:45:35 +000034
35 def test_coerced_floats(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +000036 self.same_hash(int(1.23e300), float(1.23e300))
Fred Drake97656a12001-05-18 21:45:35 +000037 self.same_hash(float(0.5), complex(0.5, 0.0))
Fred Drake13634cf2000-06-29 19:17:04 +000038
39
Fred Drake2e2be372001-09-20 21:33:42 +000040def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +000041 support.run_unittest(HashEqualityTestCase)
Fred Drake2e2be372001-09-20 21:33:42 +000042
43
44if __name__ == "__main__":
45 test_main()