mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
80 lines
6.7 KiB
Python
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']
|