def METHOD_NAME(
    song,
    listener_id,
    config,
    split_dir,
    listener_audiograms,
    expected_results,
    tmp_path,
):
    """Test the function _evaluate_song_listener returns correct results given input"""
    np.random.seed(2023)
    listener_data = listener_audiograms[listener_id]
    audiogram_left = Audiogram(
        listener_data["audiogram_levels_l"], listener_data["audiogram_cfs"]
    )
    audiogram_right = Audiogram(
        listener_data["audiogram_levels_r"], listener_data["audiogram_cfs"]
    )
    listener = Listener(audiogram_left, audiogram_right, id=listener_id)
    # Generate reference and enhanced wav files
    enhanced_folder = tmp_path / "enhanced"
    enhanced_folder.mkdir()
    config = DictConfig(config)
    config.path.music_dir = (tmp_path / "reference").as_posix()
    instruments = ["drums", "bass", "other", "vocals"]
    # Create reference and enhanced wav samples
    for lr_instrument in list(expected_results.keys()):
        # enhanced signals are mono
        enh_file = (
            enhanced_folder
            / f"{listener.id}"
            / f"{song}"
            / f"{listener.id}_{song}_{lr_instrument}.wav"
        )
        enh_file.parent.mkdir(exist_ok=True, parents=True)
        # Using very short 100 ms signals to speed up the test
        wavfile.write(
            enh_file,
            44100,
            np.random.uniform(-1, 1, 4410).astype(np.float32) * 32768,
        )
    for instrument in instruments:
        # reference signals are stereo
        ref_file = Path(config.path.music_dir) / split_dir / song / f"{instrument}.wav"
        ref_file.parent.mkdir(parents=True, exist_ok=True)
        wavfile.write(
            ref_file,
            44100,
            np.random.uniform(-1, 1, (4410, 2)).astype(np.float32) * 32768,
        )
    # Call the function
    combined_score, per_instrument_score = _evaluate_song_listener(
        song,
        listener,
        config,
        split_dir,
        enhanced_folder,
    )
    # Check the outputs
    # Combined score
    assert isinstance(combined_score, float)
    assert combined_score == pytest.approx(
        0.231629828, rel=pytest.rel_tolerance, abs=pytest.abs_tolerance
    )
    # Per instrument score
    assert isinstance(per_instrument_score, dict)
    for instrument in expected_results:
        assert instrument in per_instrument_score
        assert isinstance(per_instrument_score[instrument], float)
        assert per_instrument_score[instrument] == pytest.approx(
            expected_results[instrument],
            rel=pytest.rel_tolerance,
            abs=pytest.abs_tolerance,
        )