From d5a9019220c90982d44a7c9e24d7174f53542495 Mon Sep 17 00:00:00 2001 From: tyow Date: Sat, 7 Feb 2026 21:17:49 -0500 Subject: [PATCH 1/2] shuffleFix --- packages/core/signal.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs index 2f9fe4b18..66d28cc78 100644 --- a/packages/core/signal.mjs +++ b/packages/core/signal.mjs @@ -389,7 +389,9 @@ export const randL = (n) => { export const randrun = (n) => { return signal((t, controls) => { // Without adding 0.5, the first cycle is always 0,1,2,3,... - const rands = getRandsAtTime(t.floor().add(0.5), n, controls.randSeed); + let rands = getRandsAtTime(t.floor().add(0.5), n, controls.randSeed); + // Support n = 1 + if (!Array.isArray(rands)) rands = [rands]; const nums = rands .map((n, i) => [n, i]) .sort((a, b) => (a[0] > b[0]) - (a[0] < b[0])) From 8a72f212575f0d34dffc8beeafdc02365ed6dfc5 Mon Sep 17 00:00:00 2001 From: tyow Date: Sun, 8 Feb 2026 12:45:47 -0500 Subject: [PATCH 2/2] add test --- packages/core/test/signal.test.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/core/test/signal.test.mjs b/packages/core/test/signal.test.mjs index b02f8a08b..26c1d656a 100644 --- a/packages/core/test/signal.test.mjs +++ b/packages/core/test/signal.test.mjs @@ -9,7 +9,7 @@ import Fraction from 'fraction.js'; import { describe, it, expect, vi } from 'vitest'; import { saw, saw2, isaw, isaw2, per, perx, cyclesPer } from '../signal.mjs'; -import { fastcat, sequence, State, TimeSpan, Hap } from '../index.mjs'; +import { fastcat, sequence, State, TimeSpan, Hap, note } from '../index.mjs'; const st = (begin, end) => new State(ts(begin, end)); const ts = (begin, end) => new TimeSpan(Fraction(begin), Fraction(end)); @@ -59,3 +59,9 @@ describe('perx', () => { ); }); }); + +describe('shuffle', () => { + it('returns original pattern if input is 1', () => { + expect(note('c d e f').sound('piano').shuffle(1).firstCycle()).toEqual(note('c d e f').sound('piano').firstCycle()); + }); +});