|
33 | 33 |
|
34 | 34 | from tests.common.debug import minimal
|
35 | 35 | from tests.conjecture.common import (
|
| 36 | + draw_integer_kwargs, |
36 | 37 | draw_value,
|
37 | 38 | fresh_data,
|
38 | 39 | ir_nodes,
|
@@ -272,13 +273,33 @@ def test_compute_max_children_and_all_children_agree(ir_type_and_kwargs):
|
272 | 273 | # compute_max_children, because they by necessity require iterating over 2**127
|
273 | 274 | # or more elements. We do the not great approximation of checking just the first
|
274 | 275 | # element is what we expect.
|
275 |
| -@pytest.mark.parametrize( |
276 |
| - "min_value, max_value, first", |
277 |
| - [(None, None, -(2**127) + 1), (None, 42, (-(2**127) + 1) + 42), (42, None, 42)], |
278 |
| -) |
279 |
| -def test_compute_max_children_unbounded_integer_ranges(min_value, max_value, first): |
280 |
| - kwargs = {"min_value": min_value, "max_value": max_value, "weights": None} |
281 |
| - assert first == next(all_children("integer", kwargs)) |
| 276 | + |
| 277 | + |
| 278 | +@pytest.mark.parametrize("use_min_value", [True, False]) |
| 279 | +@pytest.mark.parametrize("use_max_value", [True, False]) |
| 280 | +def test_compute_max_children_unbounded_integer_ranges(use_min_value, use_max_value): |
| 281 | + @given( |
| 282 | + draw_integer_kwargs( |
| 283 | + use_min_value=use_min_value, |
| 284 | + use_max_value=use_max_value, |
| 285 | + use_weights=use_min_value and use_max_value, |
| 286 | + ) |
| 287 | + ) |
| 288 | + def f(kwargs): |
| 289 | + if kwargs["min_value"] is not None: |
| 290 | + expected = kwargs["min_value"] |
| 291 | + else: |
| 292 | + offset = ( |
| 293 | + 0 |
| 294 | + if kwargs["max_value"] is None |
| 295 | + else min(kwargs["max_value"], kwargs["shrink_towards"]) |
| 296 | + ) |
| 297 | + expected = offset - (2**127) + 1 |
| 298 | + |
| 299 | + first = next(all_children("integer", kwargs)) |
| 300 | + assert expected == first, (expected, first) |
| 301 | + |
| 302 | + f() |
282 | 303 |
|
283 | 304 |
|
284 | 305 | @given(st.randoms())
|
|
0 commit comments