add test code & fix bugs