add exhaustive test