first test pass and code refactoring
second case pass and code refactoring
third case passed and code refactoring
forth case passed and code refactoring
fifth case passed and code refactoring
fifth case and code refactoring
sixth case and code refactoring
code refactoring step 1
final test and code refactoring