TMunit is both a unit testing and workload generation tool. Its primary objective is to help Transactional Memory (TM) designers specify test and optimize TM designs. TMunit provides a domain-specific language for describing transactional workloads for performance evaluation, and transactional schedules for unit testing. It can also automatically derive realistic workloads from (lock-based) concurrent applications to complement the small collection of existing micro- and macro-benchmarks.
Specifically, TMunit provides a high level domain-specific language to write workloads and tests easily. The workload is represented by a series of operations encapsulated in transactions encapsulated, in turn, in threads. A test consists in executing a /schedule/, a predetermined interleaving of these concurrent operations, and in checking whether an assertion holds, or if an /invariant/ remains true during the execution.
TMunit produces transactional C code that can be compiled with the Dresden TM compiler (DTMC) and run with TinySTM.