add tests & docs