message: testing exponential approach and cancelScheduledValues
diff: @@ -33,7 +33,7 @@ define(["Test", "Tone/signal/TransportTimelineSignal", "helper/Offline", "Tone/t
  return Offline(function(Transport){
  var sched = new TransportTimelineSignal(1).toMaster();
  sched.setValueAtTime(1, 0.1);
  - sched.linearRampToValueAtTime(2, 0.2)
  + sched.linearRampToValueAtTime(2, 0.2);
  Transport.start(0.1);
  }, 0.4, 1).then(function(buffer){
  expect(buffer.getValueAtTime(0)).to.be.closeTo(1, 0.03);
  @@ -48,7 +48,7 @@ define(["Test", "Tone/signal/TransportTimelineSignal", "helper/Offline", "Tone/t
  return Offline(function(Transport){
  var sched = new TransportTimelineSignal(1).toMaster();
  sched.setValueAtTime(1, 0.1);
  - sched.exponentialRampToValueAtTime(2, 0.2)
  + sched.exponentialRampToValueAtTime(2, 0.2);
  Transport.start(0.1);
  }, 0.4, 1).then(function(buffer){
  expect(buffer.getValueAtTime(0)).to.be.closeTo(1, 0.03);
  @@ -74,6 +74,20 @@ define(["Test", "Tone/signal/TransportTimelineSignal", "helper/Offline", "Tone/t
  });
  });
  + it("can get exponential approach in the future", function(){
  + var sched;
  + return Offline(function(Transport){
  + sched = new TransportTimelineSignal(0.5).toMaster();
  + sched.setValueAtTime(0.5, 0);
  + sched.setTargetAtTime(1, 0.2, 0.2);
  + Transport.start(0.1);
  + }, 0.6).then(function(buffer){
  + buffer.forEach(function(sample, time){
  + expect(sample).to.be.closeTo(sched.getValueAtTime(time - 0.1), 0.05);
  + });
  + });
  + });
  +
  it("can loop the signal when the Transport loops", function(){
  var sched;
  return Offline(function(Transport){
  @@ -145,7 +159,7 @@ define(["Test", "Tone/signal/TransportTimelineSignal", "helper/Offline", "Tone/t
  });
  });
  - it("can cancel a scheduled value", function(){
  + it("can cancel and hold a scheduled value", function(){
  var sched;
  return Offline(function(Transport){
  sched = new TransportTimelineSignal(0).toMaster();
  @@ -161,6 +175,23 @@ define(["Test", "Tone/signal/TransportTimelineSignal", "helper/Offline", "Tone/t
  });
  });
  + it("can cancel a scheduled value", function(){
  + var sched;
  + return Offline(function(Transport){
  + sched = new TransportTimelineSignal(0).toMaster();
  + sched.setValueAtTime(0, 0);
  + sched.linearRampToValueAtTime(1, 0.5);
  + sched.linearRampToValueAtTime(0, 1);
  + sched.cancelScheduledValues(0.6);
  + Transport.start(0);
  + }, 1).then(function(buffer){
  + expect(buffer.getValueAtTime(0)).to.be.closeTo(0, 0.1);
  + expect(buffer.getValueAtTime(0.25)).to.be.closeTo(0.5, 0.1);
  + expect(buffer.getValueAtTime(0.5)).to.be.closeTo(1, 0.1);
  + expect(buffer.getValueAtTime(0.75)).to.be.closeTo(1, 0.1);
  + });
  + });
  +
  it("can automate values with different units", function(){
  var sched;
  return Offline(function(Transport){
  