def test_equals_identifies_equal_objects_with_pcs_only(self): ts = ToneSystem(9) mode1 = ModalGroup(ts, pcs=ts.get_pitch_class_set([1,2,4])) mode2 = ModalGroup(ts, pcs=ts.get_pitch_class_set([1,3,4])) self.assertEqual(mode1, mode2) mode2 = ModalGroup(ts, pcs=ts.get_pitch_class_set([1,2,5])) self.assertNotEqual(mode1, mode2)
def test_can_append_modal_group_to_empty_stream(self): ts = ToneSystem(12, rand=NotReallyRand()) t = NoteStream(ts, [], group_length=3) grp = ts.get_pitch_class_set([2,3,4,-1]) t = t.append(Link([grp])) result = ts.get_pitch_class_set(t.notes) self.assertEqual(ts.get_pitch_class_set([2,3,4,-1]), result)
def test_will_generate_notes_from_pcs(self): ts = ToneSystem(13, rand=NotReallyRand()) expected = [1,2,4] expected_pcs = ts.get_pitch_class_set(expected) mode1 = ModalGroup(ts, pcs=expected_pcs) notes = mode1.generate_notes([6]) self.assertEqual(expected_pcs, ts.get_pitch_class_set(notes)) self.assertEquals(6, notes[0])
def test_can_append_modal_group(self): ts = ToneSystem(12, rand=NotReallyRand()) t = NoteStream(ts, [1,2,3,4], group_length=4) grp = ts.get_pitch_class_set([2,3,4,-1]) t = t.append(Link([grp])) print "Notes: ", t.notes result = ts.get_pitch_class_set(t.notes) self.assertEqual(ts.get_pitch_class_set([1,2,3,4,-1]), result)
def test_large_pcs_benchmark(self): ts = ToneSystem(42, rand=NotReallyRand()) expected = [1,4,7,9,12,5,6,20,3,2,8,11] expected_pcs = ts.get_pitch_class_set(expected) mode1 = ModalGroup(ts, pcs=expected_pcs) notes = mode1.generate_notes([5,24]) self.assertEqual(12, len(notes)) self.assertEqual(expected_pcs, ts.get_pitch_class_set(notes)) self.assertEquals(5, notes[0]) self.assertEquals(24, notes[1])
def test_will_not_allow_pcs_and_notes_to_be_specified(self): ts = ToneSystem(23) ok = False try: mode = ModalGroup(ts, pcs=ts.get_pitch_class_set([1,2,4]), \ notes=[1,2,4]) except: ok = True self.assertTrue(ok, 'should have thrown in the constructor')
def test_large_pcs_benchmark_with_only_2_notes_to_complete(self): ts = ToneSystem(42, rand=NotReallyRand()) expected = [1,4,7,9,12,5,6,20,3,2,8,11] expected_pcs = ts.get_pitch_class_set(expected) mode1 = ModalGroup(ts, pcs=expected_pcs) notes = mode1.generate_notes([5,24,6,7,8,9,10,11,12,13]) #TODO: should the pcs class has an add note method that returns #a new object? That would help with large groups self.assertEqual(12, len(notes)) self.assertEqual(expected_pcs, ts.get_pitch_class_set(notes)) self.assertEquals(5, notes[0]) self.assertEquals(24, notes[1])
def test_can_find_out_number_of_notes_from_number_of_intervals(self): #The actual tone system doesn't really matter, it's just #easier to generate a pcs using a tone system than by hand ts = ToneSystem(9) #First one by hand, then automate pcs = ts.get_pitch_class_set([1,12,3,4,5]) result = ModalGroup.get_note_count_from_pcs(pcs) self.assertEqual(5, result) for i in range(1,40): p = range(i, 41) expected = len(p) pcs = ts.get_pitch_class_set(p) result = ModalGroup.get_note_count_from_pcs(pcs) self.assertEqual(expected, result)