blob: ee3794ae9a3dc810f92a01ae1f00f9b2322a4918 [file] [log] [blame]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00002from test import 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
Neil Schemenauerfd288c72001-01-02 16:30:31 +00008class Cmp:
9 def __init__(self,arg):
10 self.arg = arg
11
12 def __repr__(self):
13 return '<Cmp %s>' % self.arg
14
Guido van Rossum47b9ff62006-08-24 00:41:19 +000015 def __eq__(self, other):
16 return self.arg == other
Neil Schemenauerfd288c72001-01-02 16:30:31 +000017
Guido van Rossumab078dd2008-01-06 00:09:11 +000018class Anything:
19 def __eq__(self, other):
20 return True
21
22 def __ne__(self, other):
23 return False
24
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000025class ComparisonTest(unittest.TestCase):
Guido van Rossume2a383d2007-01-15 16:59:06 +000026 set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000027 set2 = [[1], (3,), None, Empty()]
28 candidates = set1 + set2
Neil Schemenauerfd288c72001-01-02 16:30:31 +000029
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000030 def test_comparisons(self):
31 for a in self.candidates:
32 for b in self.candidates:
33 if ((a in self.set1) and (b in self.set1)) or a is b:
34 self.assertEqual(a, b)
Neil Schemenauere7e694f2001-01-03 02:13:26 +000035 else:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036 self.assertNotEqual(a, b)
Neil Schemenauerfd288c72001-01-02 16:30:31 +000037
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000038 def test_id_comparisons(self):
39 # Ensure default comparison compares id() of args
40 L = []
41 for i in range(10):
42 L.insert(len(L)//2, Empty())
43 for a in L:
44 for b in L:
Guido van Rossum47b9ff62006-08-24 00:41:19 +000045 self.assertEqual(a == b, id(a) == id(b),
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000046 'a=%r, b=%r' % (a, b))
47
Guido van Rossume27dc722007-03-27 22:37:34 +000048 def test_ne_defaults_to_not_eq(self):
49 a = Cmp(1)
50 b = Cmp(1)
51 self.assertTrue(a == b)
52 self.assertFalse(a != b)
53
Guido van Rossumab078dd2008-01-06 00:09:11 +000054 def test_issue_1393(self):
55 x = lambda: None
56 self.assertEqual(x, Anything())
57 self.assertEqual(Anything(), x)
58 y = object()
59 self.assertEqual(y, Anything())
60 self.assertEqual(Anything(), y)
61
62
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000063def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +000064 support.run_unittest(ComparisonTest)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000065
66if __name__ == '__main__':
67 test_main()