mirror of
https://github.com/macaodha/batdetect2.git
synced 2026-05-22 22:32:18 +02:00
Mark some tests as slow for quicker feedback
This commit is contained in:
parent
c24056214c
commit
e80fe8675d
10
justfile
10
justfile
@ -20,7 +20,15 @@ install:
|
||||
# Testing & Coverage
|
||||
# Run tests using pytest.
|
||||
test:
|
||||
uv run pytest -n auto {{TESTS_DIR}}
|
||||
uv run pytest {{TESTS_DIR}}
|
||||
|
||||
# Run the fast subset of tests (excludes @pytest.mark.slow).
|
||||
test-quick:
|
||||
uv run pytest --durations=10 -m "not slow" {{TESTS_DIR}}
|
||||
|
||||
# Run only long-running tests marked with @pytest.mark.slow.
|
||||
test-slow:
|
||||
uv run pytest -m "slow" {{TESTS_DIR}}
|
||||
|
||||
# Run tests and generate coverage data.
|
||||
coverage:
|
||||
|
||||
@ -129,3 +129,8 @@ exclude = [
|
||||
"src/batdetect2/finetune",
|
||||
"src/batdetect2/utils",
|
||||
]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
markers = [
|
||||
"slow: marks long-running tests that are skipped in quick runs",
|
||||
]
|
||||
|
||||
@ -46,6 +46,7 @@ def test_process_file_returns_recording_level_predictions(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_process_files_is_batch_size_invariant(
|
||||
api_v2: BatDetect2API,
|
||||
example_audio_files: list[Path],
|
||||
@ -180,6 +181,7 @@ def test_user_can_read_extracted_features_per_detection(
|
||||
assert all(vec.size > 0 for vec in feature_vectors)
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_user_can_load_checkpoint_and_finetune(
|
||||
tmp_path: Path,
|
||||
example_annotations,
|
||||
@ -293,6 +295,7 @@ def test_checkpoint_with_same_targets_config_keeps_heads_unchanged(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_user_can_finetune_only_heads(
|
||||
tmp_path: Path,
|
||||
example_annotations,
|
||||
@ -328,6 +331,7 @@ def test_user_can_finetune_only_heads(
|
||||
assert list(finetune_dir.rglob("*.ckpt"))
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_user_can_evaluate_small_dataset_and_get_metrics(
|
||||
api_v2: BatDetect2API,
|
||||
example_annotations,
|
||||
@ -414,6 +418,7 @@ def test_detection_threshold_override_changes_process_file_results(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_detection_threshold_override_is_ephemeral_in_process_file(
|
||||
api_v2: BatDetect2API,
|
||||
example_audio_files: list[Path],
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import numpy as np
|
||||
import pytest
|
||||
import torch
|
||||
import torch.nn.functional as F
|
||||
from hypothesis import given, settings
|
||||
@ -10,6 +11,7 @@ from batdetect2.utils import audio_utils, detector_utils
|
||||
|
||||
@given(duration=st.floats(min_value=0.1, max_value=1))
|
||||
@settings(deadline=None)
|
||||
@pytest.mark.slow
|
||||
def test_can_compute_correct_spectrogram_width(duration: float):
|
||||
samplerate = parameters.TARGET_SAMPLERATE_HZ
|
||||
params = parameters.DEFAULT_SPECTROGRAM_PARAMETERS
|
||||
@ -89,6 +91,7 @@ def test_pad_audio_without_fixed_size(duration: float):
|
||||
|
||||
@given(duration=st.floats(min_value=0.1, max_value=2))
|
||||
@settings(deadline=None)
|
||||
@pytest.mark.slow
|
||||
def test_computed_spectrograms_are_actually_divisible_by_the_spec_divide_factor(
|
||||
duration: float,
|
||||
):
|
||||
|
||||
@ -3,11 +3,13 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from batdetect2.cli import cli
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_cli_detect_command_on_test_audio(tmp_path: Path) -> None:
|
||||
"""User story: run legacy detect on example audio directory."""
|
||||
|
||||
@ -29,6 +31,7 @@ def test_cli_detect_command_on_test_audio(tmp_path: Path) -> None:
|
||||
assert len(list(results_dir.glob("*.json"))) == 3
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_cli_detect_command_with_non_trivial_time_expansion(
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
@ -52,6 +55,7 @@ def test_cli_detect_command_with_non_trivial_time_expansion(
|
||||
assert "Time Expansion Factor: 10" in result.stdout
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_cli_detect_command_with_spec_feature_flag(tmp_path: Path) -> None:
|
||||
"""User story: request extra spectral features in output CSV."""
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@ def test_cli_predict_help() -> None:
|
||||
assert "dataset" in result.output
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_cli_predict_directory_runs_on_real_audio(
|
||||
tmp_path: Path,
|
||||
tiny_checkpoint_path: Path,
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from batdetect2.cli import cli
|
||||
@ -19,6 +20,7 @@ def test_cli_train_help() -> None:
|
||||
assert "--model" in result.output
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_cli_train_from_checkpoint_runs_on_small_dataset(
|
||||
tmp_path: Path,
|
||||
tiny_checkpoint_path: Path,
|
||||
|
||||
@ -2,11 +2,13 @@
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from batdetect2.cli import cli
|
||||
|
||||
runner = CliRunner()
|
||||
pytestmark = pytest.mark.slow
|
||||
|
||||
|
||||
def test_can_process_jeff37_files(
|
||||
|
||||
@ -2,11 +2,14 @@
|
||||
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
from batdetect2 import api
|
||||
|
||||
DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_no_detections_above_nyquist():
|
||||
"""Test that no detections are made above the nyquist frequency."""
|
||||
# Recording donated by @@kdarras
|
||||
|
||||
@ -4,6 +4,7 @@ from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
from hypothesis import given, settings
|
||||
from hypothesis import strategies as st
|
||||
|
||||
@ -13,6 +14,7 @@ from batdetect2.detector import parameters
|
||||
|
||||
@settings(deadline=None, max_examples=5)
|
||||
@given(duration=st.floats(min_value=0.1, max_value=2))
|
||||
@pytest.mark.slow
|
||||
def test_can_import_model_without_pickle(duration: float):
|
||||
# NOTE: remove this test once no other issues are found This is a temporary
|
||||
# test to check that change in model loading did not impact model behaviour
|
||||
@ -42,6 +44,7 @@ def test_can_import_model_without_pickle(duration: float):
|
||||
assert predictions_without_pickle == predictions_with_pickle
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_can_import_model_without_pickle_on_test_data(
|
||||
example_audio_files: List[Path],
|
||||
):
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from soundevent import data
|
||||
|
||||
from batdetect2.config import BatDetect2Config
|
||||
from batdetect2.train import run_train
|
||||
|
||||
pytestmark = pytest.mark.slow
|
||||
|
||||
|
||||
def _build_fast_train_config() -> BatDetect2Config:
|
||||
config = BatDetect2Config()
|
||||
|
||||
@ -37,6 +37,7 @@ def test_can_initialize_default_module():
|
||||
assert isinstance(module, L.LightningModule)
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_can_save_checkpoint(
|
||||
tmp_path: Path,
|
||||
clip: data.Clip,
|
||||
@ -182,6 +183,7 @@ def test_api_from_checkpoint_reconstructs_model_config(tmp_path: Path):
|
||||
assert api.audio_config.samplerate == module.model_config.samplerate
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
def test_train_smoke_produces_loadable_checkpoint(
|
||||
tmp_path: Path,
|
||||
example_annotations: list[data.ClipAnnotation],
|
||||
|
||||
Loading…
Reference in New Issue
Block a user