A useful test checks a specific observable result. Truthiness alone misses errors such as returning the wrong positive number, and a single try block around a whole suite can stop every later case after the first failure. You will build a small runner that isolates each assertion and records both passes and failures.
The runner borrows a few familiar testing ideas without pretending to be pytest. It discovers callable names with a test_ prefix, supports checks for an expected exception, and produces stable named failure reports. The checks are deliberately independent of wall-clock time, files, and external services. Empty suites return empty results or zero counts, while several failures must all be reported. Later projects use this approach to protect a refactor before changing its implementation.