Writing unit tests for an interpreter is a really interesting task. It forces you to find ways to break the semantics.