Coverage for tests/test_utils.py: 100%
34 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-02 11:07 +0100
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-02 11:07 +0100
1"""Tests for the `certus.utils` module."""
3import hypothesis as hyp
4import hypothesis.strategies as st
6from certus import utils
8ST_FLOATS = st.floats(allow_nan=False)
11@hyp.given(ST_FLOATS)
12def test_clamp_no_limits(value):
13 """Check clamping without limits does nothing."""
14 assert utils.clamp(value) == value
17@hyp.given(ST_FLOATS, ST_FLOATS)
18def test_clamp_lower_limit(value, lower):
19 """Check clamping with a lower limit sets a minimum."""
20 clamped = utils.clamp(value, lower=lower)
22 assert isinstance(clamped, float)
23 assert clamped >= lower
25 if value > lower:
26 assert clamped == value
27 else:
28 assert clamped == lower
31@hyp.given(ST_FLOATS, ST_FLOATS)
32def test_clamp_upper_limit(value, upper):
33 """Check clamping with an upper limits sets a maximum."""
34 clamped = utils.clamp(value, upper=upper)
36 assert isinstance(clamped, float)
37 assert clamped <= upper
39 if value < upper:
40 assert clamped == value
41 else:
42 assert clamped == upper
45@hyp.given(ST_FLOATS, st.tuples(ST_FLOATS, ST_FLOATS).map(sorted))
46def test_clamp_both_limits(value, limits):
47 """Check clamping with both limits sets a range."""
48 lower, upper = limits
49 clamped = utils.clamp(value, lower, upper)
51 assert isinstance(clamped, float)
52 assert lower <= clamped <= upper
54 if value >= upper:
55 assert clamped == upper
56 elif value <= lower:
57 assert clamped == lower
58 else:
59 assert clamped == value