more tests
allow falsy values
tidy
handle empty sets