blob: 13da80d2d4d59e3278d1178c813d923e367a2d95 [file] [log] [blame]
Neal Norwitz349c0ed2006-04-09 04:50:18 +00001import unittest
2from test import test_support
Neil Schemenauerfd288c72001-01-02 16:30:31 +00003
Neil Schemenauerfd288c72001-01-02 16:30:31 +00004class Empty:
5 def __repr__(self):
6 return '<Empty>'
7
8class Coerce:
9 def __init__(self, arg):
10 self.arg = arg
11
12 def __repr__(self):
13 return '<Coerce %s>' % self.arg
14
15 def __coerce__(self, other):
16 if isinstance(other, Coerce):
17 return self.arg, other.arg
18 else:
Neil Schemenauere7e694f2001-01-03 02:13:26 +000019 return self.arg, other
Neil Schemenauerfd288c72001-01-02 16:30:31 +000020
21class Cmp:
22 def __init__(self,arg):
23 self.arg = arg
24
25 def __repr__(self):
26 return '<Cmp %s>' % self.arg
27
28 def __cmp__(self, other):
29 return cmp(self.arg, other)
30
Neal Norwitz349c0ed2006-04-09 04:50:18 +000031class 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
Neil Schemenauerfd288c72001-01-02 16:30:31 +000035
Neal Norwitz349c0ed2006-04-09 04:50:18 +000036 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)
Neil Schemenauere7e694f2001-01-03 02:13:26 +000041 else:
Neal Norwitz349c0ed2006-04-09 04:50:18 +000042 self.assertNotEqual(a, b)
Neil Schemenauerfd288c72001-01-02 16:30:31 +000043
Neal Norwitz349c0ed2006-04-09 04:50:18 +000044 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))
53
54def test_main():
55 test_support.run_unittest(ComparisonTest)
56
57if __name__ == '__main__':
58 test_main()