you missed a lot of test cases here!