Skip to content

Commit d28450f

Browse files
committed
proper __bool__ on complement set and tests
1 parent d34e461 commit d28450f

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

boltons/setutils.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -907,11 +907,18 @@ def __hash__(self):
907907
return hash(self._included) ^ hash(self._excluded)
908908

909909
def __len__(self):
910-
if self._included:
910+
if self._included is not None:
911911
return len(self._included)
912912
raise NotImplementedError('complemented sets have undefined length')
913913

914914
def __iter__(self):
915-
if self._included:
915+
if self._included is not None:
916916
return iter(self._included)
917917
raise NotImplementedError('complemented sets have undefined contents')
918+
919+
def __bool__(self):
920+
if self._included is not None:
921+
return bool(self._included)
922+
return True
923+
924+
__nonzero__ = __bool__ # py2 compat

tests/test_setutils.py

+2
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ def test_complement_set():
117117
assert (cab ^ cbc | set('b')) == (sab | sbc)
118118
everything = complement(frozenset())
119119
assert everything in everything # https://en.wikipedia.org/wiki/Russell%27s_paradox
120+
assert bool(cab)
121+
assert not complement(u)
120122
# destructive testing
121123
cab ^= sab
122124
cab ^= sab

0 commit comments

Comments
 (0)