Model/utils/tests/test_uvalue_estimates.py
2023-07-20 15:48:26 +01:00

80 lines
6.7 KiB
Python

from utils.uvalue_estimates import classify_decile_newvalues
def test_classify_decile_newvalues_edge_cases():
decile_labels = [f"Decile {i + 1}" for i in range(10)]
decile_boundaries = list(range(11))
# Test with values at the exact boundaries
assert classify_decile_newvalues(decile_boundaries, decile_labels, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) == ['Decile 1',
'Decile 2',
'Decile 3',
'Decile 4',
'Decile 5',
'Decile 6',
'Decile 7',
'Decile 8',
'Decile 9',
'Decile 10']
# Test with values at the exact boundaries, but in reverse order
assert classify_decile_newvalues(decile_boundaries, decile_labels, [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]) == ['Decile 10',
'Decile 9',
'Decile 8',
'Decile 7',
'Decile 6',
'Decile 5',
'Decile 4',
'Decile 3',
'Decile 2',
'Decile 1']
# Test with values just below the boundaries
assert classify_decile_newvalues(decile_boundaries, decile_labels, [x - 0.5 for x in range(2, 12)]) == ['Decile 1',
'Decile 2',
'Decile 3',
'Decile 4',
'Decile 5',
'Decile 6',
'Decile 7',
'Decile 8',
'Decile 9',
'Decile 10']
# Test with values just above the boundaries
assert classify_decile_newvalues(decile_boundaries, decile_labels, [x + 0.5 for x in range(1, 11)]) == ['Decile 2',
'Decile 3',
'Decile 4',
'Decile 5',
'Decile 6',
'Decile 7',
'Decile 8',
'Decile 9',
'Decile 10',
None]
# Test with empty list
assert classify_decile_newvalues(decile_boundaries, decile_labels, []) == []
# Test with a single value
assert classify_decile_newvalues(decile_boundaries, decile_labels, [5.5]) == ['Decile 6']
# Test with all values the same
assert classify_decile_newvalues(decile_boundaries, decile_labels, [5, 5, 5, 5, 5]) == ['Decile 5', 'Decile 5',
'Decile 5', 'Decile 5',
'Decile 5']
# Test with values out of order
assert classify_decile_newvalues(decile_boundaries, decile_labels, [10, 5, 1, 7, 3]) == ['Decile 10', 'Decile 5',
'Decile 1', 'Decile 7',
'Decile 3']
# Test with negative decile boundaries
decile_boundaries = list(range(-10, 1))
assert classify_decile_newvalues(decile_boundaries, decile_labels, [-9, -5, -1]) == ['Decile 2', 'Decile 6',
'Decile 10']
# Test with floating point decile boundaries
decile_boundaries = [x / 10 for x in range(11)]
assert classify_decile_newvalues(decile_boundaries, decile_labels, [0.35, 0.55, 0.75]) == ['Decile 4', 'Decile 6',
'Decile 8']