Merge pull request #75 from tidalcycles/more-tests

Try to fix appLeft / appRight
This commit is contained in:
Alex McLean 2022-04-17 18:29:48 +01:00 committed by GitHub
commit cc60addbaa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 12 deletions

View file

@ -182,11 +182,13 @@ export class Pattern {
const event_vals = pat_val.query(state.setSpan(hap_func.wholeOrPart())); const event_vals = pat_val.query(state.setSpan(hap_func.wholeOrPart()));
for (const hap_val of event_vals) { for (const hap_val of event_vals) {
const new_whole = hap_func.whole; const new_whole = hap_func.whole;
const new_part = hap_func.part.intersection_e(hap_val.part); const new_part = hap_func.part.intersection(hap_val.part);
const new_value = hap_func.value(hap_val.value); if (new_part) {
const new_context = hap_val.combineContext(hap_func); const new_value = hap_func.value(hap_val.value);
const hap = new Hap(new_whole, new_part, new_value, new_context); const new_context = hap_val.combineContext(hap_func);
haps.push(hap); const hap = new Hap(new_whole, new_part, new_value, new_context);
haps.push(hap);
}
} }
} }
return haps; return haps;
@ -203,11 +205,13 @@ export class Pattern {
const hap_funcs = pat_func.query(state.setSpan(hap_val.wholeOrPart())); const hap_funcs = pat_func.query(state.setSpan(hap_val.wholeOrPart()));
for (const hap_func of hap_funcs) { for (const hap_func of hap_funcs) {
const new_whole = hap_val.whole; const new_whole = hap_val.whole;
const new_part = hap_func.part.intersection_e(hap_val.part); const new_part = hap_func.part.intersection(hap_val.part);
const new_value = hap_func.value(hap_val.value); if (new_part) {
const new_context = hap_val.combineContext(hap_func); const new_value = hap_func.value(hap_val.value);
const hap = new Hap(new_whole, new_part, new_value, new_context); const new_context = hap_val.combineContext(hap_func);
haps.push(hap); const hap = new Hap(new_whole, new_part, new_value, new_context);
haps.push(hap);
}
} }
} }
return haps; return haps;

View file

@ -5,7 +5,7 @@ import { id } from './util.mjs';
export function steady(value) { export function steady(value) {
// A continuous value // A continuous value
return new Pattern((span) => Hap(undefined, span, value)); return new Pattern((state) => [new Hap(undefined, state.span, value)]);
} }
export const signal = (func) => { export const signal = (func) => {

View file

@ -36,6 +36,9 @@ import {
id, id,
ply, ply,
} from '../index.mjs'; } from '../index.mjs';
import { steady } from '../signal.mjs';
//import { Time } from 'tone'; //import { Time } from 'tone';
import pkg from 'tone'; import pkg from 'tone';
const { Time } = pkg; const { Time } = pkg;
@ -108,6 +111,18 @@ describe('Hap', function () {
assert.deepStrictEqual(state3, { incrementme: 12 }); assert.deepStrictEqual(state3, { incrementme: 12 });
}); });
}); });
describe('wholeOrPart()', () => {
const ts1 = new TimeSpan(Fraction(0), Fraction(1));
const ts0_5 = new TimeSpan(Fraction(0), Fraction(0.5));
const continuousHap = new Hap(undefined, ts1, 'hello');
const discreteHap = new Hap(ts1, ts0_5, 'hello');
it('Can pick a whole', () => {
assert.deepStrictEqual(discreteHap.wholeOrPart(), ts1);
});
it('Can pick a part', () => {
assert.deepStrictEqual(continuousHap.wholeOrPart(), ts1);
});
});
}); });
describe('Pattern', function () { describe('Pattern', function () {
@ -399,7 +414,7 @@ describe('Pattern', function () {
}); });
}); });
describe('struct()', function () { describe('struct()', function () {
it('Can restructure a pattern', function () { it('Can restructure a discrete pattern', function () {
assert.deepStrictEqual(sequence('a', 'b').struct(sequence(true, true, true)).firstCycle(), [ assert.deepStrictEqual(sequence('a', 'b').struct(sequence(true, true, true)).firstCycle(), [
hap(ts(0, third), ts(0, third), 'a'), hap(ts(0, third), ts(0, third), 'a'),
hap(ts(third, twothirds), ts(third, 0.5), 'a'), hap(ts(third, twothirds), ts(third, 0.5), 'a'),
@ -425,6 +440,9 @@ describe('Pattern', function () {
sequence('a', ['a', silence], 'a').firstCycle(), sequence('a', ['a', silence], 'a').firstCycle(),
); );
}); });
it('Can structure a continuous pattern', () => {
assert.deepStrictEqual(steady('a').struct(true, [true, true]).firstCycle(), sequence('a', ['a', 'a']).firstCycle());
});
}); });
describe('mask()', function () { describe('mask()', function () {
it('Can fragment a pattern', function () { it('Can fragment a pattern', function () {