mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Handle range conversions that do not start at 1 (#48298)
This commit is contained in:
parent
cc12d29f6d
commit
c340a39275
@ -66,7 +66,8 @@ def ranged_value_to_percentage(
|
|||||||
(1,255), 127: 50
|
(1,255), 127: 50
|
||||||
(1,255), 10: 4
|
(1,255), 10: 4
|
||||||
"""
|
"""
|
||||||
return int((value * 100) // states_in_range(low_high_range))
|
offset = low_high_range[0] - 1
|
||||||
|
return int(((value - offset) * 100) // states_in_range(low_high_range))
|
||||||
|
|
||||||
|
|
||||||
def percentage_to_ranged_value(
|
def percentage_to_ranged_value(
|
||||||
@ -83,7 +84,8 @@ def percentage_to_ranged_value(
|
|||||||
(1,255), 50: 127.5
|
(1,255), 50: 127.5
|
||||||
(1,255), 4: 10.2
|
(1,255), 4: 10.2
|
||||||
"""
|
"""
|
||||||
return states_in_range(low_high_range) * percentage / 100
|
offset = low_high_range[0] - 1
|
||||||
|
return states_in_range(low_high_range) * percentage / 100 + offset
|
||||||
|
|
||||||
|
|
||||||
def states_in_range(low_high_range: tuple[float, float]) -> float:
|
def states_in_range(low_high_range: tuple[float, float]) -> float:
|
||||||
|
@ -147,3 +147,34 @@ async def test_percentage_to_ranged_value_small():
|
|||||||
assert math.ceil(percentage_to_ranged_value(range, 66)) == 4
|
assert math.ceil(percentage_to_ranged_value(range, 66)) == 4
|
||||||
assert math.ceil(percentage_to_ranged_value(range, 83)) == 5
|
assert math.ceil(percentage_to_ranged_value(range, 83)) == 5
|
||||||
assert math.ceil(percentage_to_ranged_value(range, 100)) == 6
|
assert math.ceil(percentage_to_ranged_value(range, 100)) == 6
|
||||||
|
|
||||||
|
|
||||||
|
async def test_ranged_value_to_percentage_starting_at_one():
|
||||||
|
"""Test a range that starts with 1."""
|
||||||
|
range = (1, 4)
|
||||||
|
|
||||||
|
assert ranged_value_to_percentage(range, 1) == 25
|
||||||
|
assert ranged_value_to_percentage(range, 2) == 50
|
||||||
|
assert ranged_value_to_percentage(range, 3) == 75
|
||||||
|
assert ranged_value_to_percentage(range, 4) == 100
|
||||||
|
|
||||||
|
|
||||||
|
async def test_ranged_value_to_percentage_starting_high():
|
||||||
|
"""Test a range that does not start with 1."""
|
||||||
|
range = (101, 255)
|
||||||
|
|
||||||
|
assert ranged_value_to_percentage(range, 101) == 0
|
||||||
|
assert ranged_value_to_percentage(range, 139) == 25
|
||||||
|
assert ranged_value_to_percentage(range, 178) == 50
|
||||||
|
assert ranged_value_to_percentage(range, 217) == 75
|
||||||
|
assert ranged_value_to_percentage(range, 255) == 100
|
||||||
|
|
||||||
|
|
||||||
|
async def test_ranged_value_to_percentage_starting_zero():
|
||||||
|
"""Test a range that starts with 0."""
|
||||||
|
range = (0, 3)
|
||||||
|
|
||||||
|
assert ranged_value_to_percentage(range, 0) == 25
|
||||||
|
assert ranged_value_to_percentage(range, 1) == 50
|
||||||
|
assert ranged_value_to_percentage(range, 2) == 75
|
||||||
|
assert ranged_value_to_percentage(range, 3) == 100
|
||||||
|
Loading…
x
Reference in New Issue
Block a user