+6
-2
@@ -117,13 +117,17 @@ class SoloTests(unittest.TestCase):
|
||||
result = compose(source)
|
||||
self.assertLessEqual(len({p.plan.motif.id for p in result.phrases}), 3)
|
||||
self.assertEqual(result.phrases[0].plan.motif.id, result.phrases[1].plan.motif.id)
|
||||
first = result.phrases[0]
|
||||
self.assertFalse(any(d.treatment.startswith('quote') for p in result.phrases for d in p.decisions))
|
||||
original = result.phrases[0].plan
|
||||
explicit = dataclasses.replace(original, treatment='exact_quote', target=None)
|
||||
first = generator.solo.realization.compose(explicit, source['staves'][0]['measures'], result.choices, tests.solo_fixtures.library(), tests.rhythm_fixtures.library(), result.tempo)
|
||||
quote = next(d for d in first.decisions if d.treatment.startswith('quote'))
|
||||
self.assertEqual(len(quote.notes), len(first.plan.motif.notes))
|
||||
shifts = {a.pitch.number() - b.pitch.number() for a, b in zip(quote.notes, first.plan.motif.notes)}
|
||||
self.assertEqual(len(shifts), 1)
|
||||
self.assertEqual(next(iter(shifts)) % 12, 0)
|
||||
self.assertEqual([(n.start, n.end) for n in quote.notes], [(first.plan.start + n.start, first.plan.start + n.end) for n in first.plan.motif.notes])
|
||||
result = dataclasses.replace(result, phrases=(first, *result.phrases[1:]))
|
||||
report = generator.solo.report.describe(result, tests.scale_fixtures.library())
|
||||
self.assertIn('quote octave', report)
|
||||
self.assertIn('source events:', report)
|
||||
@@ -140,7 +144,7 @@ class SoloTests(unittest.TestCase):
|
||||
result = compose(source)
|
||||
self.assertTrue(result.notes())
|
||||
self.assertFalse(any(n.start < 2 and n.end > 1 for n in result.notes()))
|
||||
self.assertTrue(any(d.treatment == 'fragment' for p in result.phrases for d in p.decisions))
|
||||
self.assertTrue(any(c.scale is None and c.span.start == 1 and c.span.end == 2 for c in result.choices))
|
||||
def test_microtones_are_not_rounded_into_the_catalog(self):
|
||||
with self.assertRaisesRegex(ValueError, 'semitones'):
|
||||
generator.solo.types.Pitch('c', fractions.Fraction(1, 2), 4)
|
||||
|
||||
Reference in New Issue
Block a user