Home | History | Annotate | Download | only in test
      1 import unittest
      2 from test import test_support
      3 
      4 class Empty:
      5     def __repr__(self):
      6         return '<Empty>'
      7 
      8 class 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:
     19             return self.arg, other
     20 
     21 class 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 
     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
     35 
     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)
     43 
     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))
     53 
     54 def test_main():
     55     test_support.run_unittest(ComparisonTest)
     56 
     57 if __name__ == '__main__':
     58     test_main()
     59