<commit_before>/* global it, describe */

define(["tests/Core", "chai", "Recorder", "Tone/core/Master", "Tone/effect/Effect", "Tone/component/CrossFade",
	"Tone/effect/FeedbackEffect", "Tone/signal/Signal", "Tone/effect/AutoPanner", "Tone/effect/AutoWah", "Tone/effect/BitCrusher",
	"Tone/effect/FeedbackDelay", "Tone/effect/PingPongDelay", "Tone/effect/Chorus", "tests/Common", "Tone/effect/Freeverb", 
	"Tone/effect/JCReverb", "Tone/effect/StereoEffect", "Tone/effect/StereoFeedbackEffect", 
	"Tone/effect/StereoXFeedbackEffect", "Tone/effect/Phaser", "Tone/effect/Distortion", "Tone/effect/Chebyshev", 
	"Tone/effect/Convolver", "Tone/effect/MidSideEffect", "Tone/effect/StereoWidener"], 
function(Tone, chai, Recorder, Master, Effect, CrossFade, FeedbackEffect, Signal, AutoPanner, AutoWah, BitCrusher, 
	FeedbackDelay, PingPongDelay, Chorus, Test, Freeverb, JCReverb, StereoEffect, StereoFeedbackEffect, 
	StereoXFeedbackEffect, Phaser, Distortion, Chebyshev, Convolver, MidSide, StereoWidener){

	var expect = chai.expect;

	Test.onlineContext();

	Master.mute();

	describe("Tone.Effect", function(){

		it("can be created and disposed", function(){
			var e = new Effect();
			e.dispose();
			Test.wasDisposed(e);
		});

		it("can by bypassed", function(){
			var e = new Effect();
			e.bypass();
			expect(e.wet.value).to.equal(0);
			e.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new Effect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new Effect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});

		it("has a dry/wet control", function(){
			var e = new Effect();
			expect(e.wet).is.instanceof(Signal);
			e.dispose();
		});

		it("can be set with options object", function(){
			var e = new Effect();
			e.set({"wet" : 0.22});
			expect(e.wet.value).is.closeTo(0.22, 0.01);
			e.dispose();
		});
	});

	describe("Tone.StereoEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.StereoFeedbackEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoFeedbackEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoFeedbackEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoFeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoFeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});

		it("can be set with options object", function(){
			var e = new StereoFeedbackEffect();
			var values = {
				"feedback" : 0.22
			};
			e.set(values);
			expect(e.get()).to.contain.keys(Object.keys(values));
			expect(e.feedback.value).is.closeTo(values.feedback, 0.05);
			e.dispose();
		});
	});

	describe("Tone.StereoXFeedbackEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoXFeedbackEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoXFeedbackEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoXFeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoXFeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.FeedbackEffect", function(){

		it("can be created and disposed", function(){
			var fe = new FeedbackEffect();
			fe.dispose();
			Test.wasDisposed(fe);
		});

		it("has a dry/wet control", function(){
			var e = new FeedbackEffect();
			expect(e.wet).is.instanceof(Signal);
			e.dispose();
		});

		it("has a feedback control", function(){
			var e = new FeedbackEffect();
			expect(e.feedback).is.instanceof(Signal);
			e.dispose();
		});

		it("can be set with options object", function(){
			var e = new FeedbackEffect();
			e.set({"feedback" : 0.22});
			expect(e.feedback.value).is.closeTo(0.22, 0.01);
			e.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new FeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new FeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.AutoPanner", function(){

		it("can be created and disposed", function(){
			var ap = new AutoPanner();
			ap.dispose();
			Test.wasDisposed(ap);
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var ap = new AutoPanner();
			Test.acceptsInputAndOutput(ap);
			ap.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var ap;
			Test.passesAudio(function(input, output){
				ap = new AutoPanner();
				input.connect(ap);
				ap.connect(output);
			}, function(){
				ap.dispose();
				done();
			});
		});

		it("extends Tone.Effect", function(){
			var ap = new AutoPanner();
			expect(ap).is.instanceof(Effect);
			ap.dispose();
		});

		it("can be set with options object", function(){
			var ap = new AutoPanner();
			ap.set({"wet" : 0.22});
			expect(ap.wet.value).is.closeTo(0.22, 0.01);
			ap.dispose();
		});
	});

	describe("Tone.AutoWah", function(){

		it("can be created and disposed", function(){
			var aw = new AutoWah();
			aw.dispose();
			Test.wasDisposed(aw);
		});

		it("extends Tone.Effect", function(){
			var aw = new AutoWah();
			expect(aw).is.instanceof(Effect);
			aw.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var wah = new AutoWah();
			Test.acceptsInputAndOutput(wah);
			wah.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var aw;
			Test.passesAudio(function(input, output){
				aw = new AutoWah();
				input.connect(aw);
				aw.connect(output);
			}, function(){
				aw.dispose();
				done();
			});
		});

		it("handles getter/setter", function(){
			Test.onlineContext();
			var wah = new AutoWah();
			var values = {
				"baseFrequency" : 200,
				"octaves" : 4,
				"sensitivity" : 1,
				"Q" : 3,
				"gain" : 0,
				"follower" : {
					"attack" : 0.4,
					"release" : 0.6
				}
			};
			wah.set(values);
			expect(wah.get()).to.contain.keys(Object.keys(values));
			expect(wah.baseFrequency).to.equal(values.baseFrequency);
			expect(wah.octaves).to.equal(values.octaves);
			expect(wah.Q.value).to.be.closeTo(values.Q, 0.05);
			expect(wah.gain.value).to.be.closeTo(values.gain, 0.05);
			wah.dispose();
		});
	});

	describe("Tone.BitCrusher", function(){

		it("can be created and disposed", function(){
			var bc = new BitCrusher();
			bc.dispose();
			Test.wasDisposed(bc);
		});

		it("extends Tone.Effect", function(){
			var bc = new BitCrusher();
			expect(bc).is.instanceof(Effect);
			bc.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var bc = new BitCrusher();
			Test.acceptsInputAndOutput(bc);
			bc.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var bc;
			Test.passesAudio(function(input, output){
				bc = new BitCrusher();
				input.connect(bc);
				bc.connect(output);
			}, function(){
				bc.dispose();
				done();
			});
		});

	});

	describe("Tone.FeedbackDelay", function(){

		it("can be created and disposed", function(){
			var fd = new FeedbackDelay();
			fd.dispose();
			Test.wasDisposed(fd);
		});

		it("extends Tone.FeedbackEffect", function(){
			var fd = new FeedbackDelay();
			expect(fd).is.instanceof(FeedbackEffect);
			fd.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var delay = new FeedbackDelay();
			Test.acceptsInputAndOutput(delay);
			delay.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var delay;
			Test.passesAudio(function(input, output){
				delay = new FeedbackDelay(0.01);
				input.connect(delay);
				delay.connect(output);
			}, function(){
				delay.dispose();
				done();
			});
		});

		it("can be created and disposed", function(){
			var fd = new FeedbackDelay();
			var values = {
				"delayTime" : 0.5
			};
			fd.set(values);
			expect(fd.get()).to.contain.keys(Object.keys(values));
			expect(fd.delayTime.value).to.be.closeTo(values.delayTime, 0.05);
			fd.dispose();
		});
	});

	describe("Tone.PingPongDelay", function(){

		it("can be created and disposed", function(){
			var ppd = new PingPongDelay();
			ppd.dispose();
			Test.wasDisposed(ppd);
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var delay = new PingPongDelay();
			Test.acceptsInputAndOutput(delay);
			delay.dispose();
		});

		it("extends Tone.StereoXFeedbackEffect", function(){
			var ppd = new PingPongDelay();
			expect(ppd).is.instanceof(StereoXFeedbackEffect);
			ppd.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var delay;
			Test.passesAudio(function(input, output){
				delay = new PingPongDelay(0.05);
				input.connect(delay);
				delay.connect(output);
			}, function(){
				delay.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var ppd = new PingPongDelay();
			var values = {
				"delayTime" : 0.5
			};
			ppd.set(values);
			expect(ppd.get()).to.contain.keys(Object.keys(values));
			expect(ppd.delayTime.value).to.be.closeTo(values.delayTime, 0.05);
			ppd.dispose();
		});
	});

	describe("Tone.Chorus", function(){

		it("can be created and disposed", function(){
			var chorus = new Chorus();
			chorus.dispose();
			Test.wasDisposed(chorus);
		});
		
		it("extends Tone.Effect", function(){
			var chorus = new Chorus();
			expect(chorus).is.instanceof(Effect);
			chorus.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var chorus = new Chorus();
			Test.acceptsInputAndOutput(chorus);
			chorus.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var chorus;
			Test.passesAudio(function(input, output){
				chorus = new Chorus();
				input.connect(chorus);
				chorus.connect(output);
			}, function(){
				chorus.dispose();
				done();
			});
		});

		it("has getter/setters", function(){
			var chorus = new Chorus();
			var values = {
				"frequency" : 1.5, 
				"delayTime" : 3.5,
				"depth" : 0.7,
				"feedback" : 0.1,
				"type" : "sine"
			};
			chorus.set(values);
			expect(chorus.get()).to.contain.keys(Object.keys(values));
			expect(chorus.frequency.value).to.be.closeTo(values.frequency, 0.05);
			expect(chorus.delayTime).to.equal(values.delayTime);
			expect(chorus.depth).to.equal(values.depth);
			expect(chorus.feedback.value).to.be.closeTo(values.feedback, 0.05);
			expect(chorus.type).to.equal(values.type);
			chorus.dispose();
		});
	});

	describe("Tone.Phaser", function(){

		it("can be created and disposed", function(){
			var phaser = new Phaser();
			phaser.dispose();
			Test.wasDisposed(phaser);
		});
		
		it("extends Tone.Effect", function(){
			var phaser = new Phaser();
			expect(phaser).is.instanceof(Effect);
			phaser.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var phaser = new Phaser();
			Test.acceptsInputAndOutput(phaser);
			phaser.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var phaser;
			Test.passesAudio(function(input, output){
				phaser = new Phaser();
				input.connect(phaser);
				phaser.connect(output);
			}, function(){
				phaser.dispose();
				done();
			});
		});

		it("can get/set values as an object", function(){
			var phaser = new Phaser();
			var values = {
				"frequency" : 0.5,
				"depth" : 10,
				"baseFrequency" : 400,
			};
			phaser.set(values);
			expect(phaser.get()).to.contain.keys(Object.keys(values));
			expect(phaser.frequency.value).to.be.closeTo(values.frequency, 0.05);
			expect(phaser.depth).to.be.closeTo(values.depth, 0.05);
			phaser.dispose();
		});
	});

	describe("Tone.Freeverb", function(){
		it("can be created and disposed", function(){
			var fv = new Freeverb();
			fv.dispose();
			Test.wasDisposed(fv);
		});

		it("extends Tone.Effect", function(){
			var fv = new Freeverb();
			expect(fv).is.instanceof(Effect);
			fv.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var fv = new Freeverb();
			Test.acceptsInputAndOutput(fv);
			fv.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var fv;
			Test.passesAudio(function(input, output){
				fv = new Freeverb();
				input.connect(fv);
				fv.connect(output);
			}, function(){
				fv.dispose();
				done();
			});
		});

		it("can get/set values as an object", function(){
			var fv = new Freeverb();
			var values = {
				"roomSize" : 0.6, 
				"dampening" : 0.4
			};
			fv.set(values);
			expect(fv.get()).to.contain.keys(Object.keys(values));
			expect(fv.roomSize.value).to.be.closeTo(values.roomSize, 0.05);
			expect(fv.dampening.value).to.be.closeTo(values.dampening, 0.05);
			fv.dispose();
		});
	});

	describe("Tone.JCReverb", function(){
		it("can be created and disposed", function(){
			var rev = new JCReverb();
			rev.dispose();
			Test.wasDisposed(rev);
		});

		it("extends Tone.Effect", function(){
			var rev = new JCReverb();
			expect(rev).is.instanceof(Effect);
			rev.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var rev = new JCReverb();
			Test.acceptsInputAndOutput(rev);
			rev.dispose();
		});

		it("can get/set values as an object", function(){
			var rev = new JCReverb();
			var values = {
				"roomSize" : 0.6, 
			};
			rev.set(values);
			expect(rev.get()).to.contain.keys(Object.keys(values));
			expect(rev.roomSize.value).to.be.closeTo(values.roomSize, 0.05);
			rev.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var rev;
			Test.passesAudio(function(input, output){
				rev = new JCReverb();
				input.connect(rev);
				rev.connect(output);
			}, function(){
				rev.dispose();
				done();
			});
		});
	});

	describe("Tone.Distortion", function(){
		it("can be created and disposed", function(){
			var dist = new Distortion();
			dist.dispose();
			Test.wasDisposed(dist);
		});

		it("extends Tone.Effect", function(){
			var dist = new Distortion();
			expect(dist).is.instanceof(Effect);
			dist.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var dist = new Distortion();
			Test.acceptsInputAndOutput(dist);
			dist.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var dist;
			Test.passesAudio(function(input, output){
				dist = new Distortion();
				input.connect(dist);
				dist.connect(output);
			}, function(){
				dist.dispose();
				done();
			});
		});

		it("has getter/setters", function(){
			var dist = new Distortion();
			var values = {
				"distortion" : 0.5,
				"oversample" : "2x"
			};
			dist.set(values);
			expect(dist.get()).to.contain.keys(Object.keys(values));
			expect(dist.oversample).to.equal(values.oversample);
			expect(dist.distortion).to.equal(values.distortion);
			dist.dispose();
		});
	});

	describe("Tone.Chebyshev", function(){
		it("can be created and disposed", function(){
			var cheb = new Chebyshev();
			cheb.dispose();
			Test.wasDisposed(cheb);
		});

		it("extends Tone.Effect", function(){
			var cheb = new Chebyshev();
			expect(cheb).is.instanceof(Effect);
			cheb.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var cheb = new Chebyshev();
			Test.acceptsInputAndOutput(cheb);
			cheb.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var cheb;
			Test.passesAudio(function(input, output){
				cheb = new Chebyshev(1);
				input.connect(cheb);
				cheb.connect(output);
			}, function(){
				cheb.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var cheb = new Chebyshev();
			var values = {
				"order" : 2,
				"oversample" : "2x"
			};
			cheb.set(values);
			expect(cheb.get()).to.contain.keys(Object.keys(values));
			expect(cheb.order).to.equal(values.order);
			expect(cheb.oversample).to.equal(values.oversample);
			cheb.dispose();
		});
	});

	describe("Tone.Convolver", function(){
		it("can be created and disposed", function(){
			var conv = new Convolver();
			conv.dispose();
			Test.wasDisposed(conv);
		});

		it("extends Tone.Effect", function(){
			var conv = new Convolver();
			expect(conv).is.instanceof(Effect);
			conv.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var conv = new Convolver();
			Test.acceptsInputAndOutput(conv);
			conv.dispose();
		});

		/*it("passes the incoming signal through to the output", function(done){
			var conv;
			Test.passesAudio(function(input, output){
				conv = new Convolver(1);
				input.connect(conv);
				conv.connect(output);
			}, function(){
				conv.dispose();
				done();
			});
		});*/
	});

	describe("Tone.MidSide", function(){
		it("can be created and disposed", function(){
			var midside = new MidSide();
			midside.dispose();
			Test.wasDisposed(midside);
		});

		it("extends Tone.StereoEffect", function(){
			var midside = new MidSide();
			expect(midside).is.instanceof(StereoEffect);
			midside.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var midside = new MidSide();
			Test.acceptsInputAndOutput(midside);
			midside.dispose();
		});
	});

	describe("Tone.StereoWidener", function(){
		it("can be created and disposed", function(){
			var widen = new StereoWidener();
			widen.dispose();
			Test.wasDisposed(widen);
		});

		it("extends Tone.MidSide", function(){
			var widen = new StereoWidener();
			expect(widen).is.instanceof(MidSide);
			widen.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var widen = new StereoWidener();
			Test.acceptsInputAndOutput(widen);
			widen.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var widen;
			Test.passesAudio(function(input, output){
				widen = new StereoWidener(1);
				input.connect(widen);
				widen.connect(output);
			}, function(){
				widen.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var widen = new StereoWidener();
			var values = {
				"width" : 0.75,
			};
			widen.set(values);
			expect(widen.get()).to.contain.keys(Object.keys(values));
			expect(widen.width.value).to.equal(values.width);
			widen.dispose();
		});
	});
});
<commit_msg>AutoFilter tests<commit_after>/* global it, describe */

define(["tests/Core", "chai", "Recorder", "Tone/core/Master", "Tone/effect/Effect", "Tone/component/CrossFade",
	"Tone/effect/FeedbackEffect", "Tone/signal/Signal", "Tone/effect/AutoPanner", "Tone/effect/AutoWah", "Tone/effect/BitCrusher",
	"Tone/effect/FeedbackDelay", "Tone/effect/PingPongDelay", "Tone/effect/Chorus", "tests/Common", "Tone/effect/Freeverb", 
	"Tone/effect/JCReverb", "Tone/effect/StereoEffect", "Tone/effect/StereoFeedbackEffect", 
	"Tone/effect/StereoXFeedbackEffect", "Tone/effect/Phaser", "Tone/effect/Distortion", "Tone/effect/Chebyshev", 
	"Tone/effect/Convolver", "Tone/effect/MidSideEffect", "Tone/effect/StereoWidener", "Tone/effect/AutoFilter"], 
function(Tone, chai, Recorder, Master, Effect, CrossFade, FeedbackEffect, Signal, AutoPanner, AutoWah, BitCrusher, 
	FeedbackDelay, PingPongDelay, Chorus, Test, Freeverb, JCReverb, StereoEffect, StereoFeedbackEffect, 
	StereoXFeedbackEffect, Phaser, Distortion, Chebyshev, Convolver, MidSide, StereoWidener, AutoFilter){

	var expect = chai.expect;

	Test.onlineContext();

	Master.mute();

	describe("Tone.Effect", function(){

		it("can be created and disposed", function(){
			var e = new Effect();
			e.dispose();
			Test.wasDisposed(e);
		});

		it("can by bypassed", function(){
			var e = new Effect();
			e.bypass();
			expect(e.wet.value).to.equal(0);
			e.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new Effect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new Effect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});

		it("has a dry/wet control", function(){
			var e = new Effect();
			expect(e.wet).is.instanceof(Signal);
			e.dispose();
		});

		it("can be set with options object", function(){
			var e = new Effect();
			e.set({"wet" : 0.22});
			expect(e.wet.value).is.closeTo(0.22, 0.01);
			e.dispose();
		});
	});

	describe("Tone.StereoEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.StereoFeedbackEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoFeedbackEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoFeedbackEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoFeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoFeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});

		it("can be set with options object", function(){
			var e = new StereoFeedbackEffect();
			var values = {
				"feedback" : 0.22
			};
			e.set(values);
			expect(e.get()).to.contain.keys(Object.keys(values));
			expect(e.feedback.value).is.closeTo(values.feedback, 0.05);
			e.dispose();
		});
	});

	describe("Tone.StereoXFeedbackEffect", function(){

		it("can be created and disposed", function(){
			var stereoEffect = new StereoXFeedbackEffect();
			stereoEffect.dispose();
			Test.wasDisposed(stereoEffect);
		});

		it("extends Tone.Effect", function(){
			var stereoEffect = new StereoXFeedbackEffect();
			expect(stereoEffect).is.instanceof(Effect);
			stereoEffect.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new StereoXFeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new StereoXFeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.FeedbackEffect", function(){

		it("can be created and disposed", function(){
			var fe = new FeedbackEffect();
			fe.dispose();
			Test.wasDisposed(fe);
		});

		it("has a dry/wet control", function(){
			var e = new FeedbackEffect();
			expect(e.wet).is.instanceof(Signal);
			e.dispose();
		});

		it("has a feedback control", function(){
			var e = new FeedbackEffect();
			expect(e.feedback).is.instanceof(Signal);
			e.dispose();
		});

		it("can be set with options object", function(){
			var e = new FeedbackEffect();
			e.set({"feedback" : 0.22});
			expect(e.feedback.value).is.closeTo(0.22, 0.01);
			e.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var e = new FeedbackEffect();
			Test.acceptsInputAndOutput(e);
			e.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var effect;
			Test.passesAudio(function(input, output){
				effect = new FeedbackEffect({
					"wet" : 0.5
				});
				input.connect(effect);
				effect.connect(output);
			}, function(){
				effect.dispose();
				done();
			});
		});
	});

	describe("Tone.AutoPanner", function(){

		it("can be created and disposed", function(){
			var ap = new AutoPanner();
			ap.dispose();
			Test.wasDisposed(ap);
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var ap = new AutoPanner();
			Test.acceptsInputAndOutput(ap);
			ap.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var ap;
			Test.passesAudio(function(input, output){
				ap = new AutoPanner();
				input.connect(ap);
				ap.connect(output);
			}, function(){
				ap.dispose();
				done();
			});
		});

		it("extends Tone.Effect", function(){
			var ap = new AutoPanner();
			expect(ap).is.instanceof(Effect);
			ap.dispose();
		});

		it("can be set with options object", function(){
			var ap = new AutoPanner();
			ap.set({"wet" : 0.22});
			expect(ap.wet.value).is.closeTo(0.22, 0.01);
			ap.dispose();
		});
	});

	describe("Tone.AutoWah", function(){

		it("can be created and disposed", function(){
			var aw = new AutoWah();
			aw.dispose();
			Test.wasDisposed(aw);
		});

		it("extends Tone.Effect", function(){
			var aw = new AutoWah();
			expect(aw).is.instanceof(Effect);
			aw.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var wah = new AutoWah();
			Test.acceptsInputAndOutput(wah);
			wah.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var aw;
			Test.passesAudio(function(input, output){
				aw = new AutoWah();
				input.connect(aw);
				aw.connect(output);
			}, function(){
				aw.dispose();
				done();
			});
		});

		it("handles getter/setter", function(){
			Test.onlineContext();
			var wah = new AutoWah();
			var values = {
				"baseFrequency" : 200,
				"octaves" : 4,
				"sensitivity" : 1,
				"Q" : 3,
				"gain" : 0,
				"follower" : {
					"attack" : 0.4,
					"release" : 0.6
				}
			};
			wah.set(values);
			expect(wah.get()).to.contain.keys(Object.keys(values));
			expect(wah.baseFrequency).to.equal(values.baseFrequency);
			expect(wah.octaves).to.equal(values.octaves);
			expect(wah.Q.value).to.be.closeTo(values.Q, 0.05);
			expect(wah.gain.value).to.be.closeTo(values.gain, 0.05);
			wah.dispose();
		});
	});

	describe("Tone.BitCrusher", function(){

		it("can be created and disposed", function(){
			var bc = new BitCrusher();
			bc.dispose();
			Test.wasDisposed(bc);
		});

		it("extends Tone.Effect", function(){
			var bc = new BitCrusher();
			expect(bc).is.instanceof(Effect);
			bc.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var bc = new BitCrusher();
			Test.acceptsInputAndOutput(bc);
			bc.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var bc;
			Test.passesAudio(function(input, output){
				bc = new BitCrusher();
				input.connect(bc);
				bc.connect(output);
			}, function(){
				bc.dispose();
				done();
			});
		});

	});

	describe("Tone.FeedbackDelay", function(){

		it("can be created and disposed", function(){
			var fd = new FeedbackDelay();
			fd.dispose();
			Test.wasDisposed(fd);
		});

		it("extends Tone.FeedbackEffect", function(){
			var fd = new FeedbackDelay();
			expect(fd).is.instanceof(FeedbackEffect);
			fd.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var delay = new FeedbackDelay();
			Test.acceptsInputAndOutput(delay);
			delay.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var delay;
			Test.passesAudio(function(input, output){
				delay = new FeedbackDelay(0.01);
				input.connect(delay);
				delay.connect(output);
			}, function(){
				delay.dispose();
				done();
			});
		});

		it("can be created and disposed", function(){
			var fd = new FeedbackDelay();
			var values = {
				"delayTime" : 0.5
			};
			fd.set(values);
			expect(fd.get()).to.contain.keys(Object.keys(values));
			expect(fd.delayTime.value).to.be.closeTo(values.delayTime, 0.05);
			fd.dispose();
		});
	});

	describe("Tone.PingPongDelay", function(){

		it("can be created and disposed", function(){
			var ppd = new PingPongDelay();
			ppd.dispose();
			Test.wasDisposed(ppd);
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var delay = new PingPongDelay();
			Test.acceptsInputAndOutput(delay);
			delay.dispose();
		});

		it("extends Tone.StereoXFeedbackEffect", function(){
			var ppd = new PingPongDelay();
			expect(ppd).is.instanceof(StereoXFeedbackEffect);
			ppd.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var delay;
			Test.passesAudio(function(input, output){
				delay = new PingPongDelay(0.05);
				input.connect(delay);
				delay.connect(output);
			}, function(){
				delay.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var ppd = new PingPongDelay();
			var values = {
				"delayTime" : 0.5
			};
			ppd.set(values);
			expect(ppd.get()).to.contain.keys(Object.keys(values));
			expect(ppd.delayTime.value).to.be.closeTo(values.delayTime, 0.05);
			ppd.dispose();
		});
	});

	describe("Tone.Chorus", function(){

		it("can be created and disposed", function(){
			var chorus = new Chorus();
			chorus.dispose();
			Test.wasDisposed(chorus);
		});
		
		it("extends Tone.Effect", function(){
			var chorus = new Chorus();
			expect(chorus).is.instanceof(Effect);
			chorus.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var chorus = new Chorus();
			Test.acceptsInputAndOutput(chorus);
			chorus.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var chorus;
			Test.passesAudio(function(input, output){
				chorus = new Chorus();
				input.connect(chorus);
				chorus.connect(output);
			}, function(){
				chorus.dispose();
				done();
			});
		});

		it("has getter/setters", function(){
			var chorus = new Chorus();
			var values = {
				"frequency" : 1.5, 
				"delayTime" : 3.5,
				"depth" : 0.7,
				"feedback" : 0.1,
				"type" : "sine"
			};
			chorus.set(values);
			expect(chorus.get()).to.contain.keys(Object.keys(values));
			expect(chorus.frequency.value).to.be.closeTo(values.frequency, 0.05);
			expect(chorus.delayTime).to.equal(values.delayTime);
			expect(chorus.depth).to.equal(values.depth);
			expect(chorus.feedback.value).to.be.closeTo(values.feedback, 0.05);
			expect(chorus.type).to.equal(values.type);
			chorus.dispose();
		});
	});

	describe("Tone.Phaser", function(){

		it("can be created and disposed", function(){
			var phaser = new Phaser();
			phaser.dispose();
			Test.wasDisposed(phaser);
		});
		
		it("extends Tone.Effect", function(){
			var phaser = new Phaser();
			expect(phaser).is.instanceof(Effect);
			phaser.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var phaser = new Phaser();
			Test.acceptsInputAndOutput(phaser);
			phaser.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var phaser;
			Test.passesAudio(function(input, output){
				phaser = new Phaser();
				input.connect(phaser);
				phaser.connect(output);
			}, function(){
				phaser.dispose();
				done();
			});
		});

		it("can get/set values as an object", function(){
			var phaser = new Phaser();
			var values = {
				"frequency" : 0.5,
				"depth" : 10,
				"baseFrequency" : 400,
			};
			phaser.set(values);
			expect(phaser.get()).to.contain.keys(Object.keys(values));
			expect(phaser.frequency.value).to.be.closeTo(values.frequency, 0.05);
			expect(phaser.depth).to.be.closeTo(values.depth, 0.05);
			phaser.dispose();
		});
	});

	describe("Tone.Freeverb", function(){
		it("can be created and disposed", function(){
			var fv = new Freeverb();
			fv.dispose();
			Test.wasDisposed(fv);
		});

		it("extends Tone.Effect", function(){
			var fv = new Freeverb();
			expect(fv).is.instanceof(Effect);
			fv.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var fv = new Freeverb();
			Test.acceptsInputAndOutput(fv);
			fv.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var fv;
			Test.passesAudio(function(input, output){
				fv = new Freeverb();
				input.connect(fv);
				fv.connect(output);
			}, function(){
				fv.dispose();
				done();
			});
		});

		it("can get/set values as an object", function(){
			var fv = new Freeverb();
			var values = {
				"roomSize" : 0.6, 
				"dampening" : 0.4
			};
			fv.set(values);
			expect(fv.get()).to.contain.keys(Object.keys(values));
			expect(fv.roomSize.value).to.be.closeTo(values.roomSize, 0.05);
			expect(fv.dampening.value).to.be.closeTo(values.dampening, 0.05);
			fv.dispose();
		});
	});

	describe("Tone.JCReverb", function(){
		it("can be created and disposed", function(){
			var rev = new JCReverb();
			rev.dispose();
			Test.wasDisposed(rev);
		});

		it("extends Tone.Effect", function(){
			var rev = new JCReverb();
			expect(rev).is.instanceof(Effect);
			rev.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var rev = new JCReverb();
			Test.acceptsInputAndOutput(rev);
			rev.dispose();
		});

		it("can get/set values as an object", function(){
			var rev = new JCReverb();
			var values = {
				"roomSize" : 0.6, 
			};
			rev.set(values);
			expect(rev.get()).to.contain.keys(Object.keys(values));
			expect(rev.roomSize.value).to.be.closeTo(values.roomSize, 0.05);
			rev.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var rev;
			Test.passesAudio(function(input, output){
				rev = new JCReverb();
				input.connect(rev);
				rev.connect(output);
			}, function(){
				rev.dispose();
				done();
			});
		});
	});

	describe("Tone.Distortion", function(){
		it("can be created and disposed", function(){
			var dist = new Distortion();
			dist.dispose();
			Test.wasDisposed(dist);
		});

		it("extends Tone.Effect", function(){
			var dist = new Distortion();
			expect(dist).is.instanceof(Effect);
			dist.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var dist = new Distortion();
			Test.acceptsInputAndOutput(dist);
			dist.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var dist;
			Test.passesAudio(function(input, output){
				dist = new Distortion();
				input.connect(dist);
				dist.connect(output);
			}, function(){
				dist.dispose();
				done();
			});
		});

		it("has getter/setters", function(){
			var dist = new Distortion();
			var values = {
				"distortion" : 0.5,
				"oversample" : "2x"
			};
			dist.set(values);
			expect(dist.get()).to.contain.keys(Object.keys(values));
			expect(dist.oversample).to.equal(values.oversample);
			expect(dist.distortion).to.equal(values.distortion);
			dist.dispose();
		});
	});

	describe("Tone.Chebyshev", function(){
		it("can be created and disposed", function(){
			var cheb = new Chebyshev();
			cheb.dispose();
			Test.wasDisposed(cheb);
		});

		it("extends Tone.Effect", function(){
			var cheb = new Chebyshev();
			expect(cheb).is.instanceof(Effect);
			cheb.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var cheb = new Chebyshev();
			Test.acceptsInputAndOutput(cheb);
			cheb.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var cheb;
			Test.passesAudio(function(input, output){
				cheb = new Chebyshev(1);
				input.connect(cheb);
				cheb.connect(output);
			}, function(){
				cheb.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var cheb = new Chebyshev();
			var values = {
				"order" : 2,
				"oversample" : "2x"
			};
			cheb.set(values);
			expect(cheb.get()).to.contain.keys(Object.keys(values));
			expect(cheb.order).to.equal(values.order);
			expect(cheb.oversample).to.equal(values.oversample);
			cheb.dispose();
		});
	});

	describe("Tone.Convolver", function(){
		it("can be created and disposed", function(){
			var conv = new Convolver();
			conv.dispose();
			Test.wasDisposed(conv);
		});

		it("extends Tone.Effect", function(){
			var conv = new Convolver();
			expect(conv).is.instanceof(Effect);
			conv.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var conv = new Convolver();
			Test.acceptsInputAndOutput(conv);
			conv.dispose();
		});

		/*it("passes the incoming signal through to the output", function(done){
			var conv;
			Test.passesAudio(function(input, output){
				conv = new Convolver(1);
				input.connect(conv);
				conv.connect(output);
			}, function(){
				conv.dispose();
				done();
			});
		});*/
	});

	describe("Tone.MidSide", function(){
		it("can be created and disposed", function(){
			var midside = new MidSide();
			midside.dispose();
			Test.wasDisposed(midside);
		});

		it("extends Tone.StereoEffect", function(){
			var midside = new MidSide();
			expect(midside).is.instanceof(StereoEffect);
			midside.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var midside = new MidSide();
			Test.acceptsInputAndOutput(midside);
			midside.dispose();
		});
	});

	describe("Tone.StereoWidener", function(){
		it("can be created and disposed", function(){
			var widen = new StereoWidener();
			widen.dispose();
			Test.wasDisposed(widen);
		});

		it("extends Tone.MidSide", function(){
			var widen = new StereoWidener();
			expect(widen).is.instanceof(MidSide);
			widen.dispose();
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var widen = new StereoWidener();
			Test.acceptsInputAndOutput(widen);
			widen.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var widen;
			Test.passesAudio(function(input, output){
				widen = new StereoWidener(1);
				input.connect(widen);
				widen.connect(output);
			}, function(){
				widen.dispose();
				done();
			});
		});

		it("handles getter/setters", function(){
			var widen = new StereoWidener();
			var values = {
				"width" : 0.75,
			};
			widen.set(values);
			expect(widen.get()).to.contain.keys(Object.keys(values));
			expect(widen.width.value).to.equal(values.width);
			widen.dispose();
		});
	});

	describe("Tone.AutoFilter", function(){

		it("can be created and disposed", function(){
			var af = new AutoFilter();
			af.dispose();
			Test.wasDisposed(af);
		});

		it("handles input and output connections", function(){
			Test.onlineContext();
			var af = new AutoFilter();
			Test.acceptsInputAndOutput(af);
			af.dispose();
		});

		it("passes the incoming signal through to the output", function(done){
			var af;
			Test.passesAudio(function(input, output){
				af = new AutoFilter();
				input.connect(af);
				af.connect(output);
			}, function(){
				af.dispose();
				done();
			});
		});

		it("extends Tone.Effect", function(){
			var af = new AutoFilter();
			expect(af).is.instanceof(Effect);
			af.dispose();
		});

		it("can be set with options object", function(){
			var ap = new AutoPanner();
			ap.set({"wet" : 0.22});
			expect(ap.wet.value).is.closeTo(0.22, 0.01);
			ap.dispose();
		});
	});
});

{'fraction_non_alphanumeric': 0.17407946646627842, 'fraction_numerical': 0.006316926545181289, 'mean_word_length': 3.610762234733651, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7619419', 'n_tokens_mistral': 17746, 'n_tokens_neox': 14345, 'n_words': 2968}