Added several unit tests, created script to run those unit tests on pre-commit, improved some components and finally there are some uncommited changes appeared