intrduce theory and data driven test.
first test iter version pass.
2nd and 3rd iter version tests pass.
4th iter version tests pass.
5th iter version test pass.
6th, 7th, 8th iter version test pass.
8th and 9th iter version test pass.
all tests pass
refactoring.
refactoring