add tests and recursive exercises