separate out signal tests, add tests for tight, tightx, loose
This commit is contained in:
parent
8e1fba0436
commit
cd071cb7c0
1 changed files with 61 additions and 0 deletions
61
packages/core/test/signal.test.mjs
Normal file
61
packages/core/test/signal.test.mjs
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
signal.test.mjs - <short description TODO>
|
||||||
|
Copyright (C) 2022 Strudel contributors - see <https://codeberg.org/uzu/strudel/src/branch/main/packages/core/test/pattern.test.mjs>
|
||||||
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Fraction from 'fraction.js';
|
||||||
|
|
||||||
|
import { describe, it, expect, vi } from 'vitest';
|
||||||
|
|
||||||
|
import { saw, saw2, isaw, isaw2, tight, tightx, loose } from '../signal.mjs';
|
||||||
|
import { fastcat, sequence } from '../pattern.mjs';
|
||||||
|
|
||||||
|
const st = (begin, end) => new State(ts(begin, end));
|
||||||
|
const ts = (begin, end) => new TimeSpan(Fraction(begin), Fraction(end));
|
||||||
|
const hap = (whole, part, value, context = {}) => new Hap(whole, part, value, context);
|
||||||
|
|
||||||
|
const third = Fraction(1, 3);
|
||||||
|
const twothirds = Fraction(2, 3);
|
||||||
|
|
||||||
|
const sameFirst = (a, b) => {
|
||||||
|
return expect(a.sortHapsByPart().firstCycle()).toStrictEqual(b.sortHapsByPart().firstCycle());
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('signal()', () => {
|
||||||
|
it('Can make saw/saw2', () => {
|
||||||
|
expect(saw.struct(true, true, true, true).firstCycle()).toStrictEqual(
|
||||||
|
sequence(0, 1 / 4, 1 / 2, 3 / 4).firstCycle(),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(saw2.struct(true, true, true, true).firstCycle()).toStrictEqual(sequence(-1, -0.5, 0, 0.5).firstCycle());
|
||||||
|
});
|
||||||
|
it('Can make isaw/isaw2', () => {
|
||||||
|
expect(isaw.struct(true, true, true, true).firstCycle()).toStrictEqual(sequence(1, 0.75, 0.5, 0.25).firstCycle());
|
||||||
|
|
||||||
|
expect(isaw2.struct(true, true, true, true).firstCycle()).toStrictEqual(sequence(1, 0.5, 0, -0.5).firstCycle());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('loose', () => {
|
||||||
|
it('gives cycles per hap', () => {
|
||||||
|
sameFirst(
|
||||||
|
loose.struct(true, true, true, fastcat(true, true)),
|
||||||
|
sequence(0.25, 0.25, 0.25, fastcat(0.125, 0.125)).fmap(Fraction),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('tight', () => {
|
||||||
|
it('gives haps per cycle', () => {
|
||||||
|
sameFirst(tight.struct(true, true, true, fastcat(true, true)), sequence(4, 4, 4, fastcat(8, 8)).fmap(Fraction));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('tightx', () => {
|
||||||
|
it('gives exponential haps per cycle', () => {
|
||||||
|
sameFirst(
|
||||||
|
tightx.struct(true, true, true, fastcat(true, fastcat(true, true))),
|
||||||
|
sequence(3, 3, 3, fastcat(4, fastcat(5, 5))),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue