The possibility of checking the validity of Arc, Edge and Node data structures are very important for creating proper language binding for scripting language. (A language binding must ensure that the user cannot crash the interpreter itself by a faulty code.)
Using SmartGraph, it is easy to check it by checking if the item id is in the corresponding range
For ListGraph, my suggestion would be to set the source of an edge to INVALID when it is deleted. It would cause quite little performance loss and then the validity could be checked in constant time.
Print something to the output only if it really seems necessary. Check the validity of the results of the algorithms instead (using the check() macro).
Do not print a message saying all test passed at the end of the output.