More test added.
//TODO refactoring
Approach complete, all test passed;
//TODO refactoring