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

1"""Tests for the `certus.utils` module.""" 

2 

3import hypothesis as hyp 

4import hypothesis.strategies as st 

5 

6from certus import utils 

7 

8ST_FLOATS = st.floats(allow_nan=False) 

9 

10 

11@hyp.given(ST_FLOATS) 

12def test_clamp_no_limits(value): 

13 """Check clamping without limits does nothing.""" 

14 assert utils.clamp(value) == value 

15 

16 

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) 

21 

22 assert isinstance(clamped, float) 

23 assert clamped >= lower 

24 

25 if value > lower: 

26 assert clamped == value 

27 else: 

28 assert clamped == lower 

29 

30 

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) 

35 

36 assert isinstance(clamped, float) 

37 assert clamped <= upper 

38 

39 if value < upper: 

40 assert clamped == value 

41 else: 

42 assert clamped == upper 

43 

44 

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) 

50 

51 assert isinstance(clamped, float) 

52 assert lower <= clamped <= upper 

53 

54 if value >= upper: 

55 assert clamped == upper 

56 elif value <= lower: 

57 assert clamped == lower 

58 else: 

59 assert clamped == value