spec/profile_spec.rb in music-transcription-0.5.3 vs spec/profile_spec.rb in music-transcription-0.5.5

- old
+ new

@@ -98,15 +98,51 @@ p.value_changes[5.0].value.should eq(0.1) p.value_changes[7.5].value.should eq(0.2) end end - describe '#merge_changes!' do - it 'should merge given value changes with existing' do - p = Profile.new(0.0, 5.0 => Change::Immediate.new(0.1), 7.5 => Change::Immediate.new(0.2)) - p.value_changes[7.5].value.should eq(0.2) - p.value_changes[10.0].should be nil - p.merge_changes!(10.0 => Change::Immediate.new(0.3)) - p.value_changes[10.0].value.should eq(0.3) + describe '#append!' do + before :each do + @p1 = Profile.new(0.0, 5.0 => Change::Immediate.new(0.1), 7.5 => Change::Immediate.new(0.2)) + @p2 = Profile.new(0.2, 1.0 => Change::Immediate.new(0.0), 2.0 => Change::Gradual.new(100.0)) + @p3 = Profile.new(0.1, 1.0 => Change::Immediate.new(0.0)) + end + + context 'offset less than last value change offset' do + it' should raise ArgumentError' do + expect { @p1.append!(@p2,7.0) }.to raise_error(ArgumentError) + end + end + + context 'offset equal to last value change offset' do + it' should not raise ArgumentError' do + expect { @p1.append!(@p2,7.5) }.not_to raise_error + end + end + + context 'offset greater than last value change offset' do + it' should not raise ArgumentError' do + expect { @p1.append!(@p2, 7.6) }.not_to raise_error + end + + it 'should add on shifted value changes from second profile' do + @p1.append!(@p2,10.0) + @p1.value_changes[11.0].value.should eq 0.0 + @p1.value_changes[12.0].value.should eq 100.0 + end + end + + context 'second profile start value equal to first profile last value' do + it 'should not add value change at offset' do + @p1.append!(@p2, 10.0) + @p1.value_changes[10.0].should be nil + end + end + + context 'second profile start value not equal to first profile last value' do + it 'should add value change at offset' do + @p1.append!(@p3, 10.0) + @p1.value_changes[10.0].should_not be nil + end end end end