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