from ttk.remote.server.xpu_server import _init_device_locks
import threading
def test_init_device_locks_for_gpu():
"""_init_device_locks([0,1]) → _device_locks 有 2 个 Lock(调真函数)。"""
_init_device_locks([0, 1])
from ttk.remote.server import xpu_server
assert set(xpu_server._device_locks.keys()) == {0, 1}
assert all(isinstance(v, type(threading.Lock())) for v in xpu_server._device_locks.values())
def test_init_device_locks_empty_for_cpu():
"""_init_device_locks(["cpu"]) → _device_locks 为空。"""
_init_device_locks(["cpu"])
from ttk.remote.server import xpu_server
assert xpu_server._device_locks == {}
def test_init_device_locks_non_contiguous():
"""_init_device_locks([2,5]) → keys={2,5}。"""
_init_device_locks([2, 5])
from ttk.remote.server import xpu_server
assert set(xpu_server._device_locks.keys()) == {2, 5}
def test_init_device_locks_clears_stale():
"""_init_device_locks 先 clear 再填——不残留旧 device 的锁。"""
from ttk.remote.server import xpu_server
xpu_server._device_locks = {99: threading.Lock()}
_init_device_locks([0, 1])
assert 99 not in xpu_server._device_locks
assert set(xpu_server._device_locks.keys()) == {0, 1}