ThreadGrader1: Condition2
Test ThreadGrader1.a: Tests your condition variables using a few threads
Test ThreadGrader1.b: Tests your condition variables using many threads
ThreadGrader2: Communicator
Test ThreadGrader2.a: Tests your communicator
Test ThreadGrader2.b: Tests your communicator, with more speakers/listeners
Test ThreadGrader2.c: Tests your communicator, with more speakers/listneers, and transmits more messages
ThreadGrader3: Join
Test ThreadGrader3.a: Tries a join on thread x before x actually runs
Test ThreadGrader3.b: Tries a join on thread x after x has completed
ThreadGrader4: WaitUntil
Test ThreadGrader4.a: Tests waitUntil to ensure it waits at least minimum amount of time
Test ThreadGrader4.b: Tests whether waitUntil actually wakes up at correct time
ThreadGrader5: Priority Scheduling
Test ThreadGrader5.a: Tests priority scheduler without donation
Test ThreadGrader5.c: Tests priority scheduler without donation, altering priorities of threads after they've started running
ThreadGrader6a: More Priority Scheduling
Test ThreadGrader6a.a: Tests priority donation
Test ThreadGrader6a.b: Tests priority donation with more locks and more complicated resource allocation
BoatGrader: Boat Simulation
Tests BoatGrader2.a-BoatGrader2.f: Test boat simulation with various numbers of threads.
Test stresstest: Tests boat simulation with a ton of threads.
