add .gitignore
unit tests and implementations