Files
ray-project--ray/python/ray/data/tests/test_ranker.py
T
2026-07-13 13:17:40 +08:00

83 lines
2.6 KiB
Python

"""Comprehensive tests for the generic ranker type system."""
from unittest.mock import MagicMock
import pytest
from ray.data._internal.execution.interfaces import PhysicalOperator
from ray.data._internal.execution.ranker import DefaultRanker, Ranker
from ray.data._internal.execution.resource_manager import ResourceManager
from ray.data._internal.execution.streaming_executor_state import Topology
def test_default_ranker():
"""Test that the ranker interface works correctly."""
ranker = DefaultRanker()
# Mock objects
op1 = MagicMock()
op1.throttling_disabled.return_value = False
op2 = MagicMock()
op2.throttling_disabled.return_value = True
topology = {}
resource_manager = MagicMock()
resource_manager.get_op_usage.return_value = MagicMock()
resource_manager.get_op_usage.return_value.object_store_memory = 1024
# Test rank_operator for first op
rank1 = ranker.rank_operator(op1, topology, resource_manager)
assert rank1 == (1, 1024) # throttling_disabled=False -> 1, memory=1024
# Test rank_operator for second op
rank2 = ranker.rank_operator(op2, topology, resource_manager)
assert rank2 == (0, 1024) # throttling_disabled=True -> 0, memory=1024
# Test rank_operators with both ops
ops = [op1, op2]
ranks = ranker.rank_operators(ops, topology, resource_manager)
assert ranks == [(1, 1024), (0, 1024)]
class IntRanker(Ranker[int]):
"""Ranker that returns integer rankings."""
def rank_operator(
self,
op: PhysicalOperator,
topology: "Topology",
resource_manager: ResourceManager,
) -> int:
"""Return integer ranking."""
return resource_manager.get_op_usage(op).object_store_memory
def test_generic_types():
"""Test that specific generic types work correctly."""
# Test integer ranker
int_ranker = IntRanker()
op1 = MagicMock()
op2 = MagicMock()
topology = {}
resource_manager = MagicMock()
resource_manager.get_op_usage.return_value = MagicMock()
resource_manager.get_op_usage.return_value.object_store_memory = 1024
# Test rank_operator for first op
rank1 = int_ranker.rank_operator(op1, topology, resource_manager)
assert rank1 == 1024
# Test rank_operator for second op
rank2 = int_ranker.rank_operator(op2, topology, resource_manager)
assert rank2 == 1024
# Test rank_operators with both ops
ops = [op1, op2]
ranks = int_ranker.rank_operators(ops, topology, resource_manager)
assert ranks == [1024, 1024]
if __name__ == "__main__":
import sys
sys.exit(pytest.main(["-v", __file__]))