log = [] CHECK = 0 def check(a,msg): # if CHECK: # assert a,msg # else: global log print "log:",log, log = [] print "%s:" % msg,a class C: def __coerce__(self,x): log.append("C_coerce") return (D(),D()) class D: def __eq__(self,x): log.append("D_eq") return 1 check(coerce(C(),C()),"coerce((),C())") check(cmp(C(),C()),"cmp(C(),C())") check(cmp(C(),D()),"cmp(C(),D())") check(cmp(D(),C()),"cmp(D(),C())") check(cmp(D(),D()),"cmp(D(),D())") check(C()==C(),"C()==C()") check(C()==D(),"C()==D()") check(D()==C(),"D()==C()") check(D()==D(),"D()==D()")