sol9x-sagar's picture
initial setup
2979822
"""Tests for preprocessing module."""
import numpy as np
import pytest
from src.inference.preprocess import preprocess, preprocess_batch, crop
class TestPreprocess:
def test_output_shape(self, dummy_face_crop):
"""Output shape is (C, H, W)."""
result = preprocess(dummy_face_crop, 128)
assert result.shape == (3, 128, 128)
def test_output_range(self, dummy_face_crop):
"""Output values in [0, 1]."""
result = preprocess(dummy_face_crop, 128)
assert result.min() >= 0.0
assert result.max() <= 1.0
def test_output_dtype(self, dummy_face_crop):
"""Output is float32."""
result = preprocess(dummy_face_crop, 128)
assert result.dtype == np.float32
def test_different_input_sizes(self):
"""Handles various input sizes."""
for size in [64, 100, 200, 256]:
img = np.random.randint(0, 255, (size, size, 3), dtype=np.uint8)
result = preprocess(img, 128)
assert result.shape == (3, 128, 128)
class TestPreprocessBatch:
def test_batch_shape(self, dummy_face_crop):
"""Batch output shape is (N, C, H, W)."""
batch = [dummy_face_crop, dummy_face_crop]
result = preprocess_batch(batch, 128)
assert result.shape == (2, 3, 128, 128)
def test_empty_batch_raises(self):
"""Empty batch raises ValueError."""
with pytest.raises(ValueError):
preprocess_batch([], 128)
class TestCrop:
def test_crop_square_output(self):
"""Crop returns square image."""
img = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
bbox = (100, 100, 200, 200) # x, y, x2, y2
result = crop(img, bbox, 1.5)
assert result.shape[0] == result.shape[1]
def test_crop_invalid_bbox_raises(self):
"""Invalid bbox raises ValueError."""
img = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
bbox = (100, 100, 100, 100) # zero width/height
with pytest.raises(ValueError):
crop(img, bbox, 1.5)