| import pytest |
|
|
| from app.agents.cuda_migration_agent import CudaMigrationAgent |
| from app.schemas import CodeChunk, Severity |
|
|
|
|
| def make_chunk(content: str, file_path: str = "model.py") -> CodeChunk: |
| return CodeChunk( |
| file_path=file_path, |
| language="Python", |
| line_start=1, |
| line_end=max(1, len(content.splitlines())), |
| content=content, |
| ) |
|
|
|
|
| @pytest.mark.anyio |
| async def test_cuda_migration_agent_detects_torch_cuda(): |
| output = await CudaMigrationAgent().analyze([make_chunk("device = torch.cuda.current_device()")]) |
|
|
| assert output.findings[0].title == "PyTorch CUDA-specific API usage" |
| assert output.findings[0].severity == Severity.medium |
| assert output.findings[0].category == "cuda_migration" |
|
|
|
|
| @pytest.mark.anyio |
| async def test_cuda_migration_agent_detects_nvidia_monitoring(): |
| output = await CudaMigrationAgent().analyze([make_chunk("import pynvml\nsubprocess.run(['nvidia-smi'])")]) |
|
|
| assert output.findings[0].title == "NVIDIA-specific GPU monitoring" |
| assert "rocm-smi" in output.findings[0].suggested_fix |
|
|
|
|
| @pytest.mark.anyio |
| async def test_cuda_migration_agent_detects_cuda_runtime_calls(): |
| output = await CudaMigrationAgent().analyze([make_chunk("cudaMemcpy(dst, src, size, cudaMemcpyDeviceToHost);", "kernel.cu")]) |
|
|
| assert output.findings[0].title == "CUDA runtime API call" |
| assert output.findings[0].confidence is not None |
|
|
|
|
| @pytest.mark.anyio |
| async def test_cuda_migration_agent_detects_cuda_libraries(): |
| output = await CudaMigrationAgent().analyze([make_chunk("handle = cublasCreate()", "linear_algebra.cpp")]) |
|
|
| assert output.findings[0].title == "CUDA library dependency" |
| assert "rocBLAS" in output.findings[0].suggested_fix |
|
|
|
|
| @pytest.mark.anyio |
| async def test_cuda_migration_agent_returns_empty_for_cpu_code(): |
| output = await CudaMigrationAgent().analyze([make_chunk("device = torch.device('cpu')")]) |
|
|
| assert output.findings == [] |
|
|