Spaces:
Sleeping
Sleeping
| import pytest | |
| import time | |
| from src.metrics import PerformanceTracker, calculate_iou | |
| def test_performance_tracker(): | |
| tracker = PerformanceTracker() | |
| tracker.start_stage("stage_test") | |
| time.sleep(0.05) # Tăng lên 50ms để bảo vệ chống flaky trên CI chậm | |
| tracker.end_stage("stage_test") | |
| report = tracker.get_report() | |
| assert "stage_test" in report["durations_seconds"] | |
| assert report["durations_seconds"]["stage_test"] >= 0.03 | |
| assert report["total_time_seconds"] >= 0.03 | |
| assert report["current_ram_mb"] >= 0.0 | |
| def test_performance_tracker_edge_cases(): | |
| tracker = PerformanceTracker() | |
| # end_stage không có start_stage -> Không lỗi/crash | |
| tracker.end_stage("non_existent_stage") | |
| report = tracker.get_report() | |
| assert "non_existent_stage" not in report["durations_seconds"] | |
| # Kiểm tra đo delta bộ nhớ | |
| delta = tracker.get_memory_delta() | |
| assert isinstance(delta, float) | |
| # get_report rỗng | |
| empty_tracker = PerformanceTracker() | |
| empty_report = empty_tracker.get_report() | |
| assert empty_report["durations_seconds"] == {} | |
| assert empty_report["total_time_seconds"] == 0.0 | |
| def test_calculate_iou_edge_cases(): | |
| # Overlap bình thường | |
| box_a = (0, 0, 10, 10) | |
| box_b = (5, 0, 10, 10) # Inter=50, Union=150 | |
| assert abs(calculate_iou(box_a, box_b) - (50.0 / 150.0)) < 1e-5 | |
| # Perfect overlap (IoU = 1.0) | |
| assert calculate_iou(box_a, box_a) == 1.0 | |
| # Containment (Box nhỏ nằm hoàn toàn trong box lớn) | |
| box_large = (0, 0, 100, 100) # Diện tích = 10000 | |
| box_small = (10, 10, 20, 20) # Diện tích = 400 | |
| # Inter=400, Union=10000 -> IoU = 0.04 | |
| assert abs(calculate_iou(box_large, box_small) - 0.04) < 1e-5 | |
| # Không chồng lấp | |
| box_c = (20, 20, 5, 5) | |
| assert calculate_iou(box_a, box_c) == 0.0 | |
| # Zero-area box (w=0 hoặc h=0) | |
| box_zero_w = (10, 10, 0, 50) | |
| box_zero_h = (10, 10, 50, 0) | |
| assert calculate_iou(box_zero_w, box_a) == 0.0 | |
| assert calculate_iou(box_zero_h, box_a) == 0.0 | |