mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-13 14:26:58 -04:00
90 lines
3.0 KiB
JavaScript
90 lines
3.0 KiB
JavaScript
import { bjorklund } from '../euclid.mjs';
|
|
import { describe, expect, it } from 'vitest';
|
|
import { fastcat } from '../pattern.mjs';
|
|
|
|
describe('bjorklund', () => {
|
|
it('should apply bjorklundlund to ons and steps', () => {
|
|
expect(bjorklund(3, 8)).toStrictEqual([1, 0, 0, 1, 0, 0, 1, 0]);
|
|
expect(bjorklund(-3, 8)).toStrictEqual([0, 1, 1, 0, 1, 1, 0, 1]);
|
|
expect(bjorklund(8, 8)).toStrictEqual([1, 1, 1, 1, 1, 1, 1, 1]);
|
|
expect(bjorklund(-8, 8)).toStrictEqual([0, 0, 0, 0, 0, 0, 0, 0]);
|
|
expect(bjorklund(5, 8)).toStrictEqual([1, 0, 1, 1, 0, 1, 1, 0]);
|
|
});
|
|
});
|
|
|
|
describe('euclid', () => {
|
|
it('Can create euclid', () => {
|
|
expect(
|
|
fastcat('a')
|
|
.euclid(3, 8)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/8: a', '3/8 → 1/2: a', '3/4 → 7/8: a']);
|
|
expect(
|
|
fastcat('a')
|
|
.euclid(5, 8)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/8: a', '1/4 → 3/8: a', '3/8 → 1/2: a', '5/8 → 3/4: a', '3/4 → 7/8: a']);
|
|
});
|
|
});
|
|
|
|
describe('euclidRot', () => {
|
|
it('Can create euclidRot', () => {
|
|
expect(
|
|
fastcat('a')
|
|
.euclidRot(3, 8, 2)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/8: a', '1/4 → 3/8: a', '5/8 → 3/4: a']);
|
|
expect(
|
|
fastcat('a')
|
|
.euclidRot(5, 8, 2)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/8: a', '1/4 → 3/8: a', '1/2 → 5/8: a', '5/8 → 3/4: a', '7/8 → 1/1: a']);
|
|
});
|
|
});
|
|
|
|
describe('euclidLegato', () => {
|
|
it('Can create euclidLegato', () => {
|
|
expect(
|
|
fastcat('a')
|
|
.euclidLegato(3, 8)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 3/8: a', '3/8 → 3/4: a', '3/4 → 1/1: a']);
|
|
expect(
|
|
fastcat('a')
|
|
.euclidLegato(5, 8)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/4: a', '1/4 → 3/8: a', '3/8 → 5/8: a', '5/8 → 3/4: a', '3/4 → 1/1: a']);
|
|
});
|
|
});
|
|
|
|
describe('euclidLegatoRot', () => {
|
|
it('Can create euclidLegatoRot', () => {
|
|
expect(
|
|
fastcat('a')
|
|
.euclidLegatoRot(3, 8, 2)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/4: a', '1/4 → 5/8: a', '5/8 → 1/1: a']);
|
|
expect(
|
|
fastcat('a')
|
|
.euclidLegatoRot(5, 8, 2)
|
|
.firstCycle()
|
|
.sort((a, b) => a.part.begin.sub(b.part.begin))
|
|
.map((a) => a.showWhole(true)),
|
|
).toStrictEqual(['0/1 → 1/4: a', '1/4 → 1/2: a', '1/2 → 5/8: a', '5/8 → 7/8: a', '7/8 → 1/1: a']);
|
|
});
|
|
});
|