spec/model/pitch_spec.rb in music-transcription-0.14.0 vs spec/model/pitch_spec.rb in music-transcription-0.15.0

- old
+ new

@@ -38,10 +38,27 @@ p = Pitch.new octave: case_data[:octave], semitone: case_data[:semitone] p.ratio.should be_within(0.01).of case_data[:ratio] p.total_semitone.should be case_data[:total_semitone] end end + + describe '#diff' do + it 'should return the difference between the given pitch, in semitones' do + C5.diff(C4).should eq(12) + C5.diff(D5).should eq(-2) + D5.diff(C5).should eq(2) + end + end + + describe '#transpose' do + it 'should add the given interval to total semitones' do + [0,1,2,5,12,13,-1,-2,-5,-12,-13].each do |interval| + pitch = Eb3.transpose(interval) + pitch.diff(Eb3).should eq(interval) + end + end + end describe '.from_ratio' do it 'should return a Pitch with given ratio' do @cases.each do |case_data| p = Pitch.from_ratio case_data[:ratio] @@ -87,41 +104,9 @@ p1.should be < p3 p2.should be < p3 p3.should be > p2 p3.should be > p1 p2.should be > p1 - end - - it "should be addable and subtractable with other pitches" do - p1 = Pitch.new semitone: 1 - p2 = Pitch.new semitone: 2 - p3 = Pitch.new semitone: 3 - - (p1 + p2).should eq(Pitch.new semitone: 3) - (p1 + p3).should eq(Pitch.new semitone: 4) - (p2 + p3).should eq(Pitch.new semitone: 5) - - (p1 - p2).should eq(Pitch.new semitone: -1) - (p1 - p3).should eq(Pitch.new semitone: -2) - (p2 - p3).should eq(Pitch.new semitone: -1) - (p3 - p2).should eq(Pitch.new semitone: 1) - (p3 - p1).should eq(Pitch.new semitone: 2) - end - - it "should be addable and subtractable with integers" do - p1 = Pitch.new semitone: 1 - p2 = Pitch.new semitone: 2 - p3 = Pitch.new semitone: 3 - - (p1 + 2).should eq(Pitch.new semitone: 3) - (p1 + 3).should eq(Pitch.new semitone: 4) - (p2 + 3).should eq(Pitch.new semitone: 5) - - (p1 - 2).should eq(Pitch.new semitone: -1) - (p1 - 3).should eq(Pitch.new semitone: -2) - (p2 - 3).should eq(Pitch.new semitone: -1) - (p3 - 2).should eq(Pitch.new semitone: 1) - (p3 - 1).should eq(Pitch.new semitone: 2) end it "should have freq of 440 for A4" do a4 = Pitch.new octave: 4, semitone: 9 a4.freq.should be_within(0.01).of(440.0)