Add some new tests
Updating some of the other tests, as they weren't quite accurate
Initial implementation, passes the tests currently committed.