rewrite the library with my personal ideas
add non existing key test