This commit is contained in:
khodowany
2026-10-02 00:35:31 -05:00
parent f2f371b951
commit a0bd19b3ba
25 changed files with 1421 additions and 586 deletions
+7 -16
View File
@@ -115,24 +115,15 @@ class HarmonicPassageTests(unittest.TestCase):
self.assertEqual(generator.solo.types.scale_index(scale, 65) - generator.solo.types.scale_index(scale, 64), 1)
class PassageStateTests(unittest.TestCase):
def test_eight_bar_cadence_carries_realized_identity_and_anchor_line(self):
def test_source_phrases_carry_identity_and_completed_anchors(self):
import tests.test_solo
solo = tests.test_solo.compose(tests.test_solo.song(count=8, chords=('Gm7', 'C7', 'FM7', 'BbM7', 'Em7b5', 'A7', 'Dm7', 'Dm7')))
self.assertEqual(len(solo.passages), 1)
self.assertEqual((solo.passages[0].start, solo.passages[0].end), (0, 32))
self.assertEqual([(p.plan.start, p.plan.end) for p in solo.phrases], [(0, 16), (16, 32)])
first, second = solo.phrases
self.assertEqual(first.plan.ending, 'connected')
self.assertEqual(first.state.motifs, second.state.motifs[:len(first.state.motifs)])
self.assertEqual(first.anchors, second.anchors)
self.assertTrue(any(a.role == 'intermediate' for a in second.anchors))
self.assertTrue(all(generator.solo.harmonic.anchor_note(a, second.state.notes) for a in second.anchors))
heard = {m.id: m for m in second.state.motifs}
self.assertGreaterEqual(len(heard), 5)
for motif in list(heard.values())[1:]:
self.assertIn(motif.parent, heard)
self.assertTrue(motif.chord_degrees)
self.assertTrue(generator.solo.harmonic.anchors_valid(second.anchors, solo.notes(), solo.end, complete=True, closure='closed')[0])
self.assertEqual((solo.passages[0].start, solo.passages[-1].end), (0, 32))
for phrase in solo.phrases:
self.assertTrue(phrase.draft.source_phrase)
self.assertTrue(phrase.state.home.chord_degrees)
self.assertTrue(all(generator.solo.harmonic.anchor_note(a, phrase.state.notes) for a in phrase.anchors))
self.assertTrue(generator.solo.harmonic.anchors_valid(phrase.anchors, phrase.state.notes, phrase.plan.end, complete=True, closure='closed')[0])
def test_development_references_realization_instead_of_source_template(self):
plan = tests.test_solo_development.plan()
harmony = generator.solo.harmonic.Harmony(choices(('C7',)))