Also, instead of bailing out on the first failed subtest, always run all subtests and print a summary at the end (with an appropriate exit code).