add test && optimize if branches