semantic version implementation and tests