adds many tests, updates the readme and docs