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']