diff --git a/tests/test_parser.py b/tests/test_parser.py index 01b1a65..40eb8dd 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -91,6 +91,21 @@ def test_subdivisions(pattern: str, expected: list): def test_repeats(pattern: str, expected: list): assert collect(zparse(pattern),len(expected)*2,"note") == expected*2 +@pytest.mark.parametrize( + "pattern,expected", + [ + ("[: 3 [2 4] :]", [0.25, 0.125, 0.125, 0.25, 0.125, 0.125]), + ("[: 1 [2 [5 6]] 3 [2 4] :]", [0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125, 0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125]), + ("(: 3 [2 4] :)", [0.25, 0.125, 0.125, 0.25, 0.125, 0.125]), + ("(: 1 [2 [5 6]] 3 [2 4] :)", [0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125, 0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125]), + ("(3 [2 4]):2", [0.25, 0.125, 0.125, 0.25, 0.125, 0.125]), + ("(1 [2 [5 6]] 3 [2 4]):2", [0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125, 0.25, 0.125, 0.0625, 0.0625, 0.25, 0.125, 0.125]), + + ] +) +def test_repeat_durations(pattern: str, expected: list): + assert collect(zparse(pattern),len(expected)*2,"duration") == expected*2 + @pytest.mark.parametrize( "pattern,expected", [ diff --git a/ziffers/classes.py b/ziffers/classes.py index 5dc399b..2f6420b 100644 --- a/ziffers/classes.py +++ b/ziffers/classes.py @@ -1097,6 +1097,9 @@ class RepeatedSequence(Sequence): yield from item.evaluate_tree(self.local_options, True) elif isinstance(item, RepeatedSequence): yield item + elif isinstance(item, Subdivision): + item.evaluate_values(options) + yield item else: yield from item elif isinstance(item, Cyclic):