blob: 15fe3c20222fb0b3bb17f8553b2919e48a4351c8 [file] [log] [blame]
Neil Schemenauerfd288c72001-01-02 16:30:31 +00001import sys
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002import unittest
3from test import test_support
Neil Schemenauerfd288c72001-01-02 16:30:31 +00004
Neil Schemenauerfd288c72001-01-02 16:30:31 +00005class Empty:
6 def __repr__(self):
7 return '<Empty>'
8
Neil Schemenauerfd288c72001-01-02 16:30:31 +00009class Cmp:
10 def __init__(self,arg):
11 self.arg = arg
12
13 def __repr__(self):
14 return '<Cmp %s>' % self.arg
15
Guido van Rossum47b9ff62006-08-24 00:41:19 +000016 def __eq__(self, other):
17 return self.arg == other
Neil Schemenauerfd288c72001-01-02 16:30:31 +000018
Guido van Rossumab078dd2008-01-06 00:09:11 +000019class Anything:
20 def __eq__(self, other):
21 return True
22
23 def __ne__(self, other):
24 return False
25
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000026class ComparisonTest(unittest.TestCase):
Guido van Rossume2a383d2007-01-15 16:59:06 +000027 set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000028 set2 = [[1], (3,), None, Empty()]
29 candidates = set1 + set2
Neil Schemenauerfd288c72001-01-02 16:30:31 +000030
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000031 def test_comparisons(self):
32 for a in self.candidates:
33 for b in self.candidates:
34 if ((a in self.set1) and (b in self.set1)) or a is b:
35 self.assertEqual(a, b)
Neil Schemenauere7e694f2001-01-03 02:13:26 +000036 else:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000037 self.assertNotEqual(a, b)
Neil Schemenauerfd288c72001-01-02 16:30:31 +000038
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000039 def test_id_comparisons(self):
40 # Ensure default comparison compares id() of args
41 L = []
42 for i in range(10):
43 L.insert(len(L)//2, Empty())
44 for a in L:
45 for b in L:
Guido van Rossum47b9ff62006-08-24 00:41:19 +000046 self.assertEqual(a == b, id(a) == id(b),
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000047 'a=%r, b=%r' % (a, b))
48
Guido van Rossume27dc722007-03-27 22:37:34 +000049 def test_ne_defaults_to_not_eq(self):
50 a = Cmp(1)
51 b = Cmp(1)
52 self.assertTrue(a == b)
53 self.assertFalse(a != b)
54
Guido van Rossumab078dd2008-01-06 00:09:11 +000055 def test_issue_1393(self):
56 x = lambda: None
57 self.assertEqual(x, Anything())
58 self.assertEqual(Anything(), x)
59 y = object()
60 self.assertEqual(y, Anything())
61 self.assertEqual(Anything(), y)
62
63
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000064def test_main():
65 test_support.run_unittest(ComparisonTest)
66
67if __name__ == '__main__':
68 test_main()