Using ddt to improve test maintainability

Moved test cases to tab-separated CSV files with the following format:
```
input<tab>expected_output
```
This should make it easier to add new test cases.