Change a variable type to avoid signed overflow; replace repeated '19999' constant...
[python.git] / Lib / test / test_compare.py
blob13da80d2d4d59e3278d1178c813d923e367a2d95
1 import unittest
2 from test import test_support
4 class Empty:
5 def __repr__(self):
6 return '<Empty>'
8 class Coerce:
9 def __init__(self, arg):
10 self.arg = arg
12 def __repr__(self):
13 return '<Coerce %s>' % self.arg
15 def __coerce__(self, other):
16 if isinstance(other, Coerce):
17 return self.arg, other.arg
18 else:
19 return self.arg, other
21 class Cmp:
22 def __init__(self,arg):
23 self.arg = arg
25 def __repr__(self):
26 return '<Cmp %s>' % self.arg
28 def __cmp__(self, other):
29 return cmp(self.arg, other)
31 class ComparisonTest(unittest.TestCase):
32 set1 = [2, 2.0, 2L, 2+0j, Coerce(2), Cmp(2.0)]
33 set2 = [[1], (3,), None, Empty()]
34 candidates = set1 + set2
36 def test_comparisons(self):
37 for a in self.candidates:
38 for b in self.candidates:
39 if ((a in self.set1) and (b in self.set1)) or a is b:
40 self.assertEqual(a, b)
41 else:
42 self.assertNotEqual(a, b)
44 def test_id_comparisons(self):
45 # Ensure default comparison compares id() of args
46 L = []
47 for i in range(10):
48 L.insert(len(L)//2, Empty())
49 for a in L:
50 for b in L:
51 self.assertEqual(cmp(a, b), cmp(id(a), id(b)),
52 'a=%r, b=%r' % (a, b))
54 def test_main():
55 test_support.run_unittest(ComparisonTest)
57 if __name__ == '__main__':
58 test_main()