add tests first
first work version
excute