|  | @@ -337,14 +337,31 @@ class test_LimitedSet(Case):
 | 
	
		
			
				|  |  |          s.add('foo')
 | 
	
		
			
				|  |  |          self.assertIsInstance(s.as_dict(), Mapping)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def test_no_duplicates(self):
 | 
	
		
			
				|  |  | +    def test_add_removes_duplicate_from_small_heap(self):
 | 
	
		
			
				|  |  |          s = LimitedSet(maxlen=2)
 | 
	
		
			
				|  |  |          s.add('foo')
 | 
	
		
			
				|  |  |          s.add('foo')
 | 
	
		
			
				|  |  | +        s.add('foo')
 | 
	
		
			
				|  |  |          self.assertEqual(len(s), 1)
 | 
	
		
			
				|  |  |          self.assertEqual(len(s._data), 1)
 | 
	
		
			
				|  |  |          self.assertEqual(len(s._heap), 1)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def test_add_removes_duplicate_from_big_heap(self):
 | 
	
		
			
				|  |  | +        s = LimitedSet(maxlen=1000)
 | 
	
		
			
				|  |  | +        [s.add(i) for i in range(2000)]
 | 
	
		
			
				|  |  | +        self.assertEqual(len(s), 1000)
 | 
	
		
			
				|  |  | +        [s.add('foo') for i in range(1000)]
 | 
	
		
			
				|  |  | +        # heap is refreshed when 15% larger than _data
 | 
	
		
			
				|  |  | +        self.assertLess(len(s._heap), 1150)
 | 
	
		
			
				|  |  | +        [s.add('foo') for i in range(1000)]
 | 
	
		
			
				|  |  | +        self.assertLess(len(s._heap), 1150)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def assert_lengths(self, s, expected, expected_data, expected_heap):
 | 
	
		
			
				|  |  | +        self.assertEqual(len(s), expected)
 | 
	
		
			
				|  |  | +        self.assertEqual(len(s._data), expected_data)
 | 
	
		
			
				|  |  | +        self.assertEqual(len(s._heap), expected_heap)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  class test_AttributeDict(Case):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def test_getattr__setattr(self):
 |