committing for backup
#127: added in some test will update unit test later