complete code further
add testing