make test pass first, then will refactor the implementation