modjam/tests/test_cuesheet.py

87 lines
2.8 KiB
Python
Raw Normal View History

import pytest
from modjam import cuesheet
def test_parse_start_args_defaults():
args = cuesheet.parse_start_args({"name": ["x"]})
assert args["name"] == "x"
assert args["freq"] == [916.1]
assert args["bw"] == list(cuesheet.VALID_BW)
assert args["sf"] == list(cuesheet.VALID_SF)
assert args["cr"] == list(cuesheet.VALID_CR)
assert args["pow"] == [22]
assert args["size"] == [40]
assert args["stations"] == ["A", "B"]
assert args["duration"] == 300
assert args["padding"] == 60
assert args["spacing"] == 2
assert args["at"] == 5
def test_parse_start_args_overrides():
args = cuesheet.parse_start_args({
"name": ["t1"],
"f": ["910.2", "915.1"],
"bw": ["62.5", "500"],
"sf": ["7", "8"],
"cr": ["5"],
"pow": ["10", "22"],
"stations": ["A", "B", "C"],
"duration": ["60"],
"padding": ["5"],
"spacing": ["1"],
"size": ["40", "200"],
"at": ["1"],
})
assert args["freq"] == [910.2, 915.1]
assert args["bw"] == [62.5, 500.0]
assert args["sf"] == [7, 8]
assert args["pow"] == [10, 22]
assert args["stations"] == ["A", "B", "C"]
assert args["duration"] == 60
assert args["size"] == [40, 200]
def test_parse_start_args_requires_name():
with pytest.raises(ValueError):
cuesheet.parse_start_args({})
def test_build_case_count():
args = cuesheet.parse_start_args({
"name": ["x"],
"f": ["915.1"],
"bw": ["500"],
"sf": ["7", "8"],
"cr": ["5"],
"pow": ["22"],
"size": ["40"],
"stations": ["A", "B"],
"duration": ["10"],
"padding": ["2"],
"spacing": ["1"],
"at": ["1"],
})
cues = cuesheet.build(cuesheet.CueParams(base_t=0.0, **args))
# 1 freq * 1 bw * 2 sf * 1 cr * 1 pow * 1 size * 2 stations
assert len(cues) == 4
def test_build_timing_invariants():
args = cuesheet.parse_start_args({"name": ["x"], "f": ["915.1"], "bw": ["500"], "sf": ["7"], "cr": ["5"], "pow": ["22"], "size": ["40"], "stations": ["A"], "duration": ["20"], "padding": ["5"], "spacing": ["1"], "at": ["1"]})
cues = cuesheet.build(cuesheet.CueParams(base_t=1000.0, **args))
c = cues[0]
assert c.next_at == 1000.0
assert c.tune_at == 1010.0
assert c.start == c.tune_at
assert c.end == c.start + 20
assert c.done_at == c.end + 10
assert c.spacing == 1.0
def test_build_consecutive_cases_separated_by_padding():
args = cuesheet.parse_start_args({"name": ["x"], "f": ["915.1"], "bw": ["500"], "sf": ["7"], "cr": ["5"], "pow": ["22"], "size": ["40"], "stations": ["A", "B"], "duration": ["10"], "padding": ["3"], "spacing": ["1"], "at": ["1"]})
cues = cuesheet.build(cuesheet.CueParams(base_t=0.0, **args))
assert cues[1].next_at == cues[0].done_at + 3