Back to Repositories

Testing Loop Control and Ratio Distribution Utilities in Textualize/rich

This test suite validates core iteration and distribution utilities in the Rich library, focusing on loop control and ratio calculation functionality. The tests verify specialized iterator behaviors and ratio-based distribution calculations essential for Rich’s formatting capabilities.

Test Coverage Overview

The test suite provides comprehensive coverage of loop control utilities and ratio distribution functionality.

  • Tests loop_first(), loop_last(), and loop_first_last() iterator functions
  • Validates ratio_distribute() for various input scenarios
  • Covers edge cases including empty lists and zero values
  • Tests both single and multiple element sequences

Implementation Analysis

The testing approach uses systematic validation of iterator outputs and distribution calculations.

Tests employ Python’s built-in assert statements to verify expected outputs against actual results. Iterator testing uses next() calls to validate sequence positions, while ratio distribution tests verify numerical calculations across different input combinations.

Technical Details

  • Python’s built-in testing capabilities
  • Iterator testing with next() and list() functions
  • Numerical validation for ratio calculations
  • Edge case handling for empty sequences and zero values

Best Practices Demonstrated

The test suite exhibits strong testing practices through comprehensive coverage and clear test organization.

  • Systematic test case organization
  • Thorough edge case coverage
  • Clear test function naming
  • Focused test scenarios with specific assertions

textualize/rich

tests/test_tools.py

            
from rich._loop import loop_first, loop_last, loop_first_last
from rich._ratio import ratio_distribute


def test_loop_first():
    assert list(loop_first([])) == []
    iterable = loop_first(["apples", "oranges", "pears", "lemons"])
    assert next(iterable) == (True, "apples")
    assert next(iterable) == (False, "oranges")
    assert next(iterable) == (False, "pears")
    assert next(iterable) == (False, "lemons")


def test_loop_last():
    assert list(loop_last([])) == []
    iterable = loop_last(["apples", "oranges", "pears", "lemons"])
    assert next(iterable) == (False, "apples")
    assert next(iterable) == (False, "oranges")
    assert next(iterable) == (False, "pears")
    assert next(iterable) == (True, "lemons")


def test_loop_first_last():
    assert list(loop_first_last([])) == []
    iterable = loop_first_last(["apples", "oranges", "pears", "lemons"])
    assert next(iterable) == (True, False, "apples")
    assert next(iterable) == (False, False, "oranges")
    assert next(iterable) == (False, False, "pears")
    assert next(iterable) == (False, True, "lemons")


def test_ratio_distribute():
    assert ratio_distribute(10, [1]) == [10]
    assert ratio_distribute(10, [1, 1]) == [5, 5]
    assert ratio_distribute(12, [1, 3]) == [3, 9]
    assert ratio_distribute(0, [1, 3]) == [0, 0]
    assert ratio_distribute(0, [1, 3], [1, 1]) == [1, 1]
    assert ratio_distribute(10, [1, 0]) == [10, 0]