diff --git a/js/strudel.mjs b/js/strudel.mjs index b2f0e7b0..8e84c3cb 100644 --- a/js/strudel.mjs +++ b/js/strudel.mjs @@ -452,18 +452,22 @@ class Pattern { } rev() { + var pat = this var query = function(span) { var cycle = span.begin.sam() var next_cycle = span.begin.nextSam() var reflect = function(to_reflect) { - var reflected = to_reflect.withTime(time => cycle + (next_cycle - time)) - [reflected.begin, reflected.end] = [reflected.end, reflected.begin] + var reflected = to_reflect.withTime(time => cycle.add(next_cycle.sub(time))) + // [reflected.begin, reflected.end] = [reflected.end, reflected.begin] -- didn't work + var tmp = reflected.begin + reflected.begin = reflected.end + reflected.end = tmp return reflected } - var haps = this.query(reflect(span)) - return haps.map(hap => hap.with_span(reflect)) + var haps = pat.query(reflect(span)) + return haps.map(hap => hap.withSpan(reflect)) } - return Pattern(query).split_queries() + return new Pattern(query)._splitQueries() } // jux(func, by=1) { diff --git a/test/pattern.test.mjs b/test/pattern.test.mjs index ddb2e981..f746784d 100644 --- a/test/pattern.test.mjs +++ b/test/pattern.test.mjs @@ -115,4 +115,9 @@ describe('Pattern', function() { assert.deepStrictEqual(slowcat([pure("a"), pure("b")])._early(1).firstCycle.map(x => x.value), ["b"]) }) }) + describe('rev()', function () { + it('Can reverse things', function () { + assert.deepStrictEqual(fastcat([pure("a"), pure("b"), pure("c")]).rev().firstCycle.sort((a,b) => a.part.begin.sub(b.part.begin)).map(a => a.value), ["c", "b","a"]) + }) + }) }) \ No newline at end of file