+10
-15
@@ -15,6 +15,7 @@ import generator.acoustic_voicing
|
||||
import generator.arrange.generate
|
||||
import generator.fretboard
|
||||
import generator.guitar
|
||||
import generator.hand_position
|
||||
import generator.harmony
|
||||
import generator.model
|
||||
import generator.parts
|
||||
@@ -43,7 +44,7 @@ class GuitarTests(unittest.TestCase):
|
||||
positions = tuple(generator.fretboard.TabPosition(6 - i, fret, 0) for i, fret in enumerate(frets))
|
||||
self.assertEqual(generator.fretboard.within_fret_span(positions), valid)
|
||||
self.assertEqual(generator.guitar.compactness(positions), max(frets) - min(frets))
|
||||
self.assertEqual(generator.guitar.position_center(positions)[0], min(frets) + max(frets))
|
||||
self.assertEqual(generator.hand_position.base(positions), min(frets))
|
||||
self.assertTrue(generator.fretboard.within_fret_span(()))
|
||||
def test_held_notes_obey_the_shared_four_fret_limit(self):
|
||||
held = {'held': generator.fretboard.TabPosition(4, 7, 57)}
|
||||
@@ -210,20 +211,14 @@ class GuitarTests(unittest.TestCase):
|
||||
generator.guitar.place_guitar(source)
|
||||
tabs = [n['pitches'][0]['tablature'] for n in tests.test_musicxml.notes(source)]
|
||||
self.assertEqual(tabs, [{'string': 1, 'fret': 10}, {'string': 1, 'fret': 12}])
|
||||
def test_grid_search_matches_exhaustive_costs_and_tie_breaks(self):
|
||||
randomizer = random.Random(17)
|
||||
states = {}
|
||||
for index in range(40):
|
||||
positions = tuple(generator.fretboard.TabPosition(s, randomizer.randrange(21), 0) for s in randomizer.sample(range(1, 7), 3))
|
||||
states[index] = generator.guitar.Placement(generator.guitar.VoicingCost(*(randomizer.randrange(8) for _ in generator.guitar.VoicingCost._fields)), tuple((str(i), p) for i, p in enumerate(positions)), None, ())
|
||||
grid = generator.guitar.nearest_positions(states)
|
||||
for x, row in enumerate(grid):
|
||||
for y, actual in enumerate(row):
|
||||
candidates = []
|
||||
for index, state in enumerate(states.values()):
|
||||
a, b = generator.guitar.position_center(tuple(p for _, p in state.active))
|
||||
candidates.append((state.cost.moved(abs(x - a) + abs(y - b)), index))
|
||||
self.assertEqual(actual[:2], min(candidates))
|
||||
def test_equal_old_centers_can_have_different_finger_adjustments(self):
|
||||
def grip(frets):
|
||||
return tuple(generator.fretboard.TabPosition(s, f, 0) for s, f in zip((4, 3, 2, 1), frets))
|
||||
first, second = grip((3, 5, 3, 5)), grip((5, 3, 5, 3))
|
||||
self.assertEqual(generator.hand_position.base(first), generator.hand_position.base(second))
|
||||
self.assertEqual(generator.guitar.movement(first, first, 3, 3), 0)
|
||||
self.assertEqual(generator.guitar.movement(first, second, 3, 3), 0)
|
||||
self.assertEqual(generator.hand_position.motion(first, second, 3, 3).fingers, 8)
|
||||
def test_generated_chord_retains_strings_when_a_melody_enters(self):
|
||||
content = tests.test_musicxml.xml_note() + '<backup><duration>4</duration></backup><forward><duration>2</duration></forward>' + tests.test_musicxml.xml_note('E', 2, 'half', octave=6, extra='<voice>2</voice>')
|
||||
document = tests.test_musicxml.parse(tests.test_musicxml.xml_score(content))
|
||||
|
||||
Reference in New Issue
Block a user