finish task 1&2, and add unittest module
finish task 3