diff --git a/packages/core/drawLine.mjs b/packages/core/drawLine.mjs index 73fac46b..05c857de 100644 --- a/packages/core/drawLine.mjs +++ b/packages/core/drawLine.mjs @@ -1,12 +1,15 @@ import { gcd } from './fraction.mjs'; -function drawLine(pat) { +// TODO: make it work for stacked patterns + support silence + +function drawLine(pat, chars = 60) { let s = ''; let c = 0; - while (s.length < 60) { + while (s.length < chars) { const haps = pat.queryArc(c, c + 1); const durations = haps.map((hap) => hap.duration); const totalSlots = gcd(...durations).inverse(); + s += '|'; haps.forEach((hap) => { const duration = hap.whole.end.sub(hap.whole.begin); const slots = totalSlots.mul(duration); @@ -15,7 +18,6 @@ function drawLine(pat) { .map((_, i) => (!i ? hap.value : '-')) .join(''); }); - s += '|'; ++c; } return s; diff --git a/packages/core/test/drawLine.test.mjs b/packages/core/test/drawLine.test.mjs new file mode 100644 index 00000000..d697c793 --- /dev/null +++ b/packages/core/test/drawLine.test.mjs @@ -0,0 +1,11 @@ +import { fastcat } from '../pattern.mjs'; +import { strict as assert } from 'assert'; +import drawLine from '../drawLine.mjs'; + +describe('drawLine', () => { + it('should work', () => { + assert.equal(drawLine(fastcat(0, [1, 2]), 10), '|0-12|0-12'); + assert.equal(drawLine(fastcat(0, [1, 2, 3]), 10), '|0--123|0--123'); + assert.equal(drawLine(fastcat(0, 1, [2, 3]), 10), '|0-1-23|0-1-23'); + }); +});