mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
optimization, more tests
This commit is contained in:
@@ -58,18 +58,18 @@ def layout_resolve(total: int, edges: Sequence[Edge]) -> list[int]:
|
||||
for size, edge in zip(sizes, edges)
|
||||
]
|
||||
|
||||
total_flexible = sum((edge.fraction or 1) for _, edge in flexible_edges)
|
||||
_Fraction = Fraction
|
||||
while flexible_edges:
|
||||
# Calculate number of characters in a ratio portion
|
||||
portion = _Fraction(
|
||||
remaining, sum((edge.fraction or 1) for _, edge in flexible_edges)
|
||||
)
|
||||
portion = _Fraction(remaining, total_flexible)
|
||||
|
||||
# If any edges will be less than their minimum, replace size with the minimum
|
||||
for flexible_index, (index, edge) in enumerate(flexible_edges):
|
||||
if portion * edge.fraction <= edge.min_size:
|
||||
sizes[index] = edge.min_size
|
||||
remaining -= edge.min_size
|
||||
total_flexible -= edge.fraction
|
||||
del flexible_edges[flexible_index]
|
||||
# New fixed size will invalidate calculations, so we need to repeat the process
|
||||
break
|
||||
|
||||
@@ -64,6 +64,28 @@ def test_two():
|
||||
[5, 2, 1, 2],
|
||||
),
|
||||
(2, [Edge(None, 1), Edge(None, 1), Edge(None, 1)], [1, 1, 1]),
|
||||
(
|
||||
2,
|
||||
[
|
||||
Edge(None, 1, min_size=5),
|
||||
Edge(None, 1, min_size=4),
|
||||
Edge(None, 1, min_size=3),
|
||||
],
|
||||
[5, 4, 3],
|
||||
),
|
||||
(
|
||||
18,
|
||||
[
|
||||
Edge(None, 1, min_size=1),
|
||||
Edge(3),
|
||||
Edge(None, 1, min_size=1),
|
||||
Edge(4),
|
||||
Edge(None, 1, min_size=1),
|
||||
Edge(5),
|
||||
Edge(None, 1, min_size=1),
|
||||
],
|
||||
[1, 3, 2, 4, 1, 5, 2],
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_multiple(size, edges, result):
|
||||
|
||||
Reference in New Issue
Block a user