refactoring
add benchmark test