def test_basic_functionality(self): # Make a priority queue queue = UniqueQueue() # It should be empty self.assertTrue(queue.empty()) # Put some stuff in it. Use `silent` mode for brevity. queue.silent = True queue.put(2) queue.put(0) queue.put(2) queue.put(1) # Make sure the non-silent API causes the class to throw. queue.silent = False with self.assertRaises(Duplicate): queue.put(0) # Not empty any more self.assertFalse(queue.empty()) # Remove stuff self.assertEqual(queue.get(), 2) self.assertEqual(queue.get(), 0) self.assertEqual(queue.get(), 1) # It should be empty again self.assertTrue(queue.empty()) # Put an old duplicate back in it, make sure it's not empty again queue.put(0) self.assertFalse(queue.empty()) # Set "explicit_unsee" mode to verify some of that behavior, and go # back to silent discards for brevity. queue.silent = True queue.explicit_unsee = True # Remove the item we just inserted. Things should be empty. queue.get() self.assertTrue(queue.empty()) # Because we didn't explicitly unsee, the 0 should be discarded # instead of re-queued, and the queue should remain empty. queue.put(0) self.assertTrue(queue.empty()) # Now, explicitly unsee, and re-queue. It should succeed. queue.unsee(0) queue.put(0) self.assertFalse(queue.empty())
def _makeQueue(self): q = UniqueQueue(maxsize=self.max_items) q.explicit_unsee = True return q