all tests pass for part I