description
initial codes
explanation and tests
update