add more test, complete code