@@ -18,6 +18,15 @@ def chord_xml(text, kind='other', root='C', extra=''):
|
||||
return f'<harmony><root><root-step>{root}</root-step></root><kind text="{text}">{kind}</kind>{extra}</harmony>'
|
||||
|
||||
class HarmonyTests(unittest.TestCase):
|
||||
def test_triad_classification_uses_effective_degrees(self):
|
||||
for symbol in ('CM', 'Dm', 'Cdim', 'Caug', 'Dm/F', 'Dm/B', 'Dm7no7', 'C7no7'):
|
||||
with self.subTest(symbol=symbol):
|
||||
self.assertTrue(generator.harmony.is_triad(generator.harmony.parse_symbol(symbol)))
|
||||
for symbol in ('C7', 'CM7', 'Cm7', 'Cdim7', 'C6', 'C13', 'Csus', 'Csus2', 'C7no5', 'Dmno1', 'Dmno5', 'Cadd9'):
|
||||
with self.subTest(symbol=symbol):
|
||||
self.assertFalse(generator.harmony.is_triad(generator.harmony.parse_symbol(symbol)))
|
||||
custom = {'kind': 'other', 'degrees': [{'value': d, 'alter': a, 'type': 'add'} for d, a in ((1, 0), (3, -1), (5, 0))]}
|
||||
self.assertTrue(generator.harmony.is_triad(custom))
|
||||
def test_quality_spellings_are_canonical(self):
|
||||
cases = {'C': 'CM', 'Cmaj': 'CM', 'Cmin': 'Cm', 'C-': 'Cm', 'C+': 'Caug', 'Co': 'Cdim', 'Csus4': 'Csus', 'Csus2': 'Csus2',
|
||||
'Cmaj7': 'CM7', 'C-7': 'Cm7', 'C+7': 'Caug7', 'C+maj7': 'CaugM7', 'Co7': 'Cdim7', 'C-7b5': 'Cm7b5',
|
||||
|
||||
Reference in New Issue
Block a user