According to lcov, coverage is now 89/102 lines, 24/28 functions. The functions that are not tested are the destructors and the two private functions defined in subtypesIterator. The untested lines mostly have to do with null pointers; some or all of them may be unnecessary, but I didn't look into it.