Skip to content

Commit 8c7c254

Browse files
committed
allow empty intervalsets in draw_string
1 parent 4ae827a commit 8c7c254

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

hypothesis-python/src/hypothesis/internal/conjecture/data.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,8 @@ def draw_string(
994994
) -> str:
995995
assert forced is None or min_size <= len(forced) <= max_size
996996
assert min_size >= 0
997+
if len(intervals) == 0:
998+
assert min_size == 0
997999

9981000
kwargs: StringKWargs = self._pooled_kwargs(
9991001
"string",

hypothesis-python/src/hypothesis/internal/conjecture/providers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,9 @@ def draw_string(
386386
assert self._cd is not None
387387
assert self._cd._random is not None
388388

389+
if len(intervals) == 0:
390+
return ""
391+
389392
average_size = min(
390393
max(min_size * 2, min_size + 5),
391394
0.5 * (min_size + max_size),

hypothesis-python/tests/conjecture/common.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,7 @@ def _collection_kwargs(draw, *, forced, use_min_size=None, use_max_size=None):
260260

261261
@st.composite
262262
def string_kwargs(draw, *, use_min_size=None, use_max_size=None, use_forced=False):
263-
# TODO also sample empty intervals, ie remove this min_size, once we handle empty
264-
# pseudo-choices in the ir
265-
interval_set = draw(intervals(min_size=1))
263+
interval_set = draw(intervals())
266264
forced = (
267265
draw(TextStrategy(OneCharStringStrategy(interval_set))) if use_forced else None
268266
)
@@ -271,6 +269,10 @@ def string_kwargs(draw, *, use_min_size=None, use_max_size=None, use_forced=Fals
271269
forced=forced, use_min_size=use_min_size, use_max_size=use_max_size
272270
)
273271
)
272+
# if the intervalset is empty, then the min size must be zero, because the
273+
# only valid value is the empty string.
274+
if len(interval_set) == 0:
275+
kwargs["min_size"] = 0
274276

275277
return {"intervals": interval_set, "forced": forced, **kwargs}
276278

0 commit comments

Comments
 (0)