zifferjs
Version:
Zifferjs - Typescript variant of Ziffers
76 lines (67 loc) • 3.69 kB
text/typescript
import { describe, expect, it } from 'vitest'
import { pattern } from '../ziffers.ts'
describe('sounds-tests', () => {
it('sample names', () => {
expect(pattern('bd').sounds()).toEqual(["bd"]);
expect(pattern('wt_foo bar foo_2 foo2').sounds()).toEqual(["wt_foo","bar", "foo_2", "foo2"]);
expect(pattern('jvbass').sounds()).toEqual(["jvbass"]);
})
it('sound syntax', () => {
expect(pattern('bd 4@bd bd:3 e3@bd bd!2').sounds()).toEqual(["bd","bd","bd","bd","bd","bd"]);
expect(pattern('4@bd e bd:3 w3@bd 5@bd').durations()).toEqual([0.25,0.125,1.0,0.125]);
expect(pattern('bd bd:0 bd:1 bd:2 bd:3 4@bd:2').indices()).toEqual([undefined,0,1,2,3,2]);
expect(pattern('bd [hh hh]').durations()).toEqual([0.25,0.125,0.125]);
expect(pattern('w [bd bd] [hh [hh hh]]').durations()).toEqual([0.5,0.5,0.5,0.25,0.25]);
expect(pattern('w [bd bd] [hh [hh hh]]').sounds()).toEqual(["bd","bd","hh","hh","hh"]);
expect(pattern('(1 2 3)@<bd hh>').sounds()).toEqual(["bd","hh","bd"]);
expect(pattern('(1 2 3 4)@<bd <hh cp>>').sounds()).toEqual(["bd","hh","bd","cp"]);
expect(pattern('[1 2 3]@<bd hh cp>').sounds()).toEqual(["bd","hh","cp"]);
expect(pattern('(1 2 3)+(0 3)@<bd <hh cp>>').sounds()).toEqual(['hh','bd','cp','bd','hh','bd']);
expect(pattern('<foo bar>').sounds()).toEqual(["foo"]);
const cpat = pattern('bd <hh <cp hh>>');
expect(cpat.next().sound).toEqual("bd");
expect(cpat.next().sound).toEqual("hh");
expect(cpat.next().sound).toEqual("bd");
expect(cpat.next().sound).toEqual("cp");
expect(cpat.next().sound).toEqual("bd");
expect(cpat.next().sound).toEqual("hh");
expect(cpat.next().sound).toEqual("bd");
expect(cpat.next().sound).toEqual("hh");
})
it('sample subdivision', () => {
let spat = pattern('[bd arp]');
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("arp");
spat = pattern('[bd <hh <cp bd>>]');
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("hh");
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("cp");
spat = pattern('cp [bd <hh <cp bd>>]');
expect(spat.next().sound).toEqual("cp");
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("hh");
expect(spat.next().sound).toEqual("cp");
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("cp");
expect(spat.next().sound).toEqual("cp");
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("hh");
expect(spat.next().sound).toEqual("cp");
expect(spat.next().sound).toEqual("bd");
expect(spat.next().sound).toEqual("bd");
})
it('indices syntax', ()=> {
expect(pattern('1:3 2:4 3:2').indices()).toEqual([3,4,2]);
expect(pattern('1:3 2:4!2 3:2').indices()).toEqual([3,4,4,2]);
expect(pattern('(1 2 3):3').indices()).toEqual([3,3,3]);
expect(pattern('<1 2 3>:3').indices()).toEqual([3]);
expect(pattern('[1 [2 3]]:3').indices()).toEqual([3,3,3]);
expect(pattern('[1 [2 3]]:<1 <4 2>>').indices()).toEqual([1,4,1]);
const pat = pattern('[1 2]:<1 2 3>');
expect(pat.next().soundIndex).toEqual(1);
expect(pat.next().soundIndex).toEqual(2);
expect(pat.next().soundIndex).toEqual(3);
expect(pat.next().soundIndex).toEqual(1);
})
})