invariants.cpp tests the ACE Token Invariant utilities. The ACE Token Invariant utilities allow an application to test the correctness of mutex and readers/writer locks. invariants.cpp takes no command-line arguments. invariants.cpp first tests readers/writer locks. This is done by spawning two threads which simulate reader and writer acquire/renew/release loops. However, the loops are performed without actual locks, so the competing threads quickly reach and invalid state. The test should report this violation of readers/writer lock invariants and both threads should exit. The second test is for mutexes. Similar to the readers/writer lock test, this test spawns two threads which perform acquire/renew/release loops. When to two threads reach an invalid mutex state, the error should be reported and the threads should exit. For these two previous tests, it is theoretically possible that the threads never reach an invalid token state. However, it is highly unlikely since the threads would have to execute the same code simultaneously for the duration of the test. Nevertheless, it is possible. The last test hardwires invalid token states. It runs two mutex and two readers/writer lock tests. It should report "succeeded" for the four tests.