@@ -224,57 +224,36 @@ def do(bad):
224224 self .assertRaises (Exc , func , Bad ())
225225
226226 def test_recursion (self ):
227- # Check comparison for recursive objects
227+ # Check that comparison for recursive objects fails gracefully
228228 from UserList import UserList
229- a = UserList (); a .append (a )
230- b = UserList (); b .append (b )
231-
232- self .assert_ (a == b )
233- self .assert_ (not a != b )
234- a .append (1 )
235- self .assert_ (a == a [0 ])
236- self .assert_ (not a != a [0 ])
237- self .assert_ (a != b )
238- self .assert_ (not a == b )
239- b .append (0 )
240- self .assert_ (a != b )
241- self .assert_ (not a == b )
242- a [1 ] = - 1
243- self .assert_ (a != b )
244- self .assert_ (not a == b )
245-
246229 a = UserList ()
247230 b = UserList ()
248231 a .append (b )
249232 b .append (a )
250- self .assert_ (a == b )
251- self .assert_ (not a != b )
233+ self .assertRaises (RuntimeError , operator .eq , a , b )
234+ self .assertRaises (RuntimeError , operator .ne , a , b )
235+ self .assertRaises (RuntimeError , operator .lt , a , b )
236+ self .assertRaises (RuntimeError , operator .le , a , b )
237+ self .assertRaises (RuntimeError , operator .gt , a , b )
238+ self .assertRaises (RuntimeError , operator .ge , a , b )
252239
253240 b .append (17 )
241+ # Even recursive lists of different lengths are different,
242+ # but they cannot be ordered
243+ self .assert_ (not (a == b ))
254244 self .assert_ (a != b )
255- self .assert_ (not a == b )
245+ self .assertRaises (RuntimeError , operator .lt , a , b )
246+ self .assertRaises (RuntimeError , operator .le , a , b )
247+ self .assertRaises (RuntimeError , operator .gt , a , b )
248+ self .assertRaises (RuntimeError , operator .ge , a , b )
256249 a .append (17 )
257- self .assert_ (a == b )
258- self .assert_ (not a != b )
259-
260- def test_recursion2 (self ):
261- # This test exercises the circular structure handling code
262- # in PyObject_RichCompare()
263- class Weird (object ):
264- def __eq__ (self , other ):
265- return self != other
266- def __ne__ (self , other ):
267- return self == other
268- def __lt__ (self , other ):
269- return self > other
270- def __gt__ (self , other ):
271- return self < other
272-
273- self .assert_ (Weird () == Weird ())
274- self .assert_ (not (Weird () != Weird ()))
275-
276- for op in opmap ["lt" ]:
277- self .assertRaises (ValueError , op , Weird (), Weird ())
250+ self .assertRaises (RuntimeError , operator .eq , a , b )
251+ self .assertRaises (RuntimeError , operator .ne , a , b )
252+ a .insert (0 , 11 )
253+ b .insert (0 , 12 )
254+ self .assert_ (not (a == b ))
255+ self .assert_ (a != b )
256+ self .assert_ (a < b )
278257
279258class DictTest (unittest .TestCase ):
280259
0 commit comments