add comprehensive test