Priority-Queue Regression Tests

Description

The library contains a single comprehensive regression test. For a given container type in pb_ds, the test creates an object of the container type and an object of the corresponding STL type (i.e., std::priority_queue). It then performs a random sequence of methods with random arguments (e.g., pushes, pops, and so forth) on both objects. At each operation, the test checks the return value of the method, and optionally both compares pb_ds's object with the STL's object as well as performing other consistency checks on pb_ds's object (e.g., that the size returned by the size method corresponds to the distance between its begin and end iterators).

Additionally, the test integrally checks exception safety and resource leaks. This is done as follows. A special allocator type, written for the purpose of the test, both randomly throws an exceptions when allocations are performed, and tracks allocations and de-allocations. The exceptions thrown at allocations simulate memory-allocation failures; the tracking mechanism checks for memory-related bugs (e.g., resource leaks and multiple de-allocations). Both pb_ds's containers and the containers' value-types are configured to use this allocator.

Tests

priority_queue_rand.cc checks all priority queue types.