Define an abstract test_t type with deferred bindings ("subject" and "results")
used by a type-bound procedure ("report") for reporting test results. The "report"
procedure thus represents an implementation of the Template Method pattern.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.