Use table driven test

This simplifies reasoning about the tests by not hiding logic behind a DSL.

If this is merged, it should follow #46 to avoid a conflict.