def test_purge(self): # purge now enforces rules # cant purge(1) now. but .purge(now=...) still works s = LimitedSet(maxlen=10) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge() self.assertEqual(len(s), 2) # expired s = LimitedSet(maxlen=10, expires=1) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge(now=time() + 100) self.assertEqual(len(s), 0) # not expired s = LimitedSet(maxlen=None, expires=1) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge(now=lambda: time() - 100) self.assertEqual(len(s), 2) # expired -> minsize s = LimitedSet(maxlen=10, minlen=10, expires=1) [s.add(i) for i in range(20)] s.minlen = 3 s.purge(now=time() + 3) self.assertEqual(s.minlen, len(s)) self.assertLessEqual( len(s._heap), s.maxlen * (100. + s.max_heap_percent_overload) / 100, )
def test_purge(self): s = LimitedSet(maxlen=None) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge(1) self.assertEqual(len(s), 9) s.purge(None) self.assertEqual(len(s), 2) # expired s = LimitedSet(maxlen=None, expires=1) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge(1, now=lambda: time() + 100) self.assertEqual(len(s), 9) s.purge(None, now=lambda: time() + 100) self.assertEqual(len(s), 2) # not expired s = LimitedSet(maxlen=None, expires=1) [s.add(i) for i in range(10)] s.maxlen = 2 s.purge(1, now=lambda: time() - 100) self.assertEqual(len(s), 10) s.purge(None, now=lambda: time() - 100) self.assertEqual(len(s), 10) s = LimitedSet(maxlen=None) [s.add(i) for i in range(10)] s.maxlen = 2 with patch('celery.datastructures.heappop') as hp: hp.side_effect = IndexError() s.purge() hp.assert_called_with(s._heap) with patch('celery.datastructures.heappop') as hp: s._data = {i * 2: i * 2 for i in range(10)} s.purge() self.assertEqual(hp.call_count, 10)