87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
|
|
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
|