optimize && add test