Finished HW
Add more tests if I can get back to this.