alphe version
add unittest