finish first version of the homework, make the test passed. will add
more unitest and throw exception