more test cases, more documentation