Tone.js/test/control/CtrlPattern.js

170 lines
4.6 KiB
JavaScript

import CtrlPattern from "Tone/control/CtrlPattern";
import Basic from "helper/Basic";
describe("CtrlPattern", function(){
Basic(CtrlPattern);
context("API", function(){
it("can be constructed with an array and type", function(){
var pattern = new CtrlPattern([0, 1, 2, 3], "down");
expect(pattern.values).to.deep.equal([0, 1, 2, 3]);
expect(pattern.type).to.equal("down");
pattern.dispose();
});
it("can be constructed with an object", function(){
var pattern = new CtrlPattern({
values : [1, 2, 3],
type : "upDown"
});
expect(pattern.values).to.deep.equal([1, 2, 3]);
expect(pattern.type).to.equal("upDown");
pattern.dispose();
});
it("returns undefined with no pattern", function(){
var pattern = new CtrlPattern();
expect(pattern.next()).to.be.undefined;
pattern.dispose();
});
it("can set the index", function(){
var pattern = new CtrlPattern([0, 2, 3, 4]);
pattern.index = 2;
expect(pattern.index).to.be.equal(2);
pattern.dispose();
});
it("can be resized smaller when the index is after the previous length", function(){
var pattern = new CtrlPattern([0, 1, 2, 3, 4]);
pattern.index = 2;
pattern.next();
expect(pattern.index).to.equal(3);
pattern.values = [0, 1, 2];
expect(pattern.next()).to.equal(0);
expect(pattern.index).to.equal(0);
pattern.dispose();
});
});
context("Patterns", function(){
it("does the up pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3], "up");
var output = [];
for (var i = 0; i < 6; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([0, 1, 2, 3, 0, 1]);
pattern.dispose();
});
it("does the down pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3], "down");
var output = [];
for (var i = 0; i < 6; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([3, 2, 1, 0, 3, 2]);
pattern.dispose();
});
it("does the upDown pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3], "upDown");
var output = [];
for (var i = 0; i < 10; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([0, 1, 2, 3, 2, 1, 0, 1, 2, 3]);
pattern.dispose();
});
it("does the downUp pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3], "downUp");
var output = [];
for (var i = 0; i < 10; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([3, 2, 1, 0, 1, 2, 3, 2, 1, 0]);
pattern.dispose();
});
it("does the alternateUp pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3, 4], "alternateUp");
var output = [];
for (var i = 0; i < 10; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([0, 2, 1, 3, 2, 4, 3, 0, 2, 1]);
pattern.dispose();
});
it("does the alternateDown pattern", function(){
var pattern = new CtrlPattern([0, 1, 2, 3, 4], "alternateDown");
var output = [];
for (var i = 0; i < 10; i++){
output[i] = pattern.value;
pattern.next();
}
expect(output).to.deep.equal([4, 2, 3, 1, 2, 0, 1, 4, 2, 3]);
pattern.dispose();
});
it("outputs random elements form the values", function(){
var pattern = new CtrlPattern([0, 1, 2, 3, 4], "random");
for (var i = 0; i < 10; i++){
var output = pattern.value;
pattern.next();
expect(pattern.values.indexOf(output)).to.not.equal(-1);
}
pattern.dispose();
});
it("does a randomWalk", function(){
var pattern = new CtrlPattern([0, 1, 2, 3, 4], "randomWalk");
pattern.index = 2;
expect(pattern.value).to.equal(2);
pattern.next();
//has moved one away
expect(Math.abs(pattern.index - 2)).to.equal(1);
var currentIndex = pattern.index;
//moved another one away
pattern.next();
expect(Math.abs(pattern.index - currentIndex)).to.equal(1);
pattern.dispose();
});
it("does randomOnce pattern", function(){
var pattern = new CtrlPattern([4, 5, 6, 7, 8], "randomOnce");
var output = [];
for (var i = 0; i < 5; i++){
output[i] = pattern.value;
pattern.next();
}
output = output.sort();
expect(output).to.deep.equal([4, 5, 6, 7, 8]);
pattern.dispose();
});
it("randomOnce can update if length of pattern changes", function(){
var pattern = new CtrlPattern([4, 5, 6, 7, 8], "randomOnce");
pattern.values = [4, 5, 6, 7, 8, 9];
var output = [];
for (var i = 0; i < 6; i++){
output[i] = pattern.value;
pattern.next();
}
output = output.sort();
expect(output).to.deep.equal([4, 5, 6, 7, 8, 9]);
pattern.dispose();
});
});
});