Currently various asserting functions (e.g., assert_max_heap) are members of *util modules. Consider bounding them to the data types they aim to assert. E.g., class Heap would have methods is_max_heap, is_min_heap that would check self's structure and return boolean. Then, given an instance heap of Heap, assertions would call these methods like that: assert_that(heap.is_max_heap()).