# IntDemo.py -- demonstrate issue 1767 class Tricky: def __init__(self, pair): self.key1 = pair[0] self.key2 = pair[1] def __cmp__(self, other): if self.key1 != other.key1: return cmp(self.key1,other.key1) return cmp(self.key2,other.key2) def __eq__(self,other): return (self.key2 == other.key2) def __repr__(self): return "(%d,%2d)" %(self.key1, self.key2) # Set of Tricky values to sort question = [(2, 3), (3, 4), (1, 0), (2, 0), (2, 4), (3, 3), (3, 4), (3, 2), (1, 0), (1, 3), (1, 4), (1, 1)] # Reference result of sort answer = [(1, 0), (1, 0), (1, 1), (1, 3), (1, 4), (2, 0), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (3, 4)] que = [Tricky(p) for p in question] print que # Test library function que.sort() print que # Check result against reference assert len(que)==len(answer) for q, a in zip(que,answer) : print q, a assert q.key1==a[0] and q.key2==a[1]