# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project from dataclasses import dataclass from typing import Any from vllm.utils.gc_utils import ( GCDebugConfig, _compute_detailed_type, _compute_top_gc_collected_objects, ) @dataclass class Normal: v: int @dataclass class ListWrapper: vs: list[int] def __len__(self) -> int: return len(self.vs) def test_compute_detailed_type(): assert ( _compute_detailed_type(Normal(v=8)) == "" ) assert _compute_detailed_type([1, 2, 3]) == "(size:3)" assert _compute_detailed_type({4, 5}) == "(size:2)" assert _compute_detailed_type({6: 7}) == "(size:1)" assert ( _compute_detailed_type(ListWrapper(vs=[])) == "(size:0)" ) def test_compute_top_gc_collected_objects(): objects: list[Any] = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], {13, 14}, {15: 16, 17: 18}, Normal(v=19), Normal(v=20), Normal(v=21), ] assert _compute_top_gc_collected_objects(objects, top=-1) == "" assert _compute_top_gc_collected_objects(objects, top=0) == "" assert ( _compute_top_gc_collected_objects(objects, top=1) == " 4:(size:3)" ) assert _compute_top_gc_collected_objects(objects, top=2) == "\n".join( [ " 4:(size:3)", " 3:", ] ) assert _compute_top_gc_collected_objects(objects, top=3) == "\n".join( [ " 4:(size:3)", " 3:", " 1:(size:2)", ] ) def test_gc_debug_config(): assert not GCDebugConfig(None).enabled assert not GCDebugConfig("").enabled assert not GCDebugConfig("0").enabled config = GCDebugConfig("1") assert config.enabled assert config.top_objects == -1 config = GCDebugConfig('{"top_objects":5}') assert config.enabled assert config.top_objects == 5