functions complete, pass all tests