UNPKG

rafa

Version:

Rafa.js is a Javascript framework for building concurrent applications.

79 lines (68 loc) 2.21 kB
module.exports = (assert, Rafa) => { suite("enumerate", () => { test("sync enumerate array", () => { var it = Rafa.Enumerator.array([1,2]); var stream = Rafa.stream(); var values = []; stream.each(v => values.push(v)); stream.done(v => values.push(v)); stream.enumerate(it); assert.equal(values.length, 3); assert.equal(values[0], 1); assert.equal(values[1], 2); assert.equal(values[2], 2); }); test("async enumerate array", done => { var it = Rafa.Enumerator.array([1,2]); var stream = Rafa.stream(); var values = []; stream .map(v => Promise.resolve(v + 1)) .each(v => values.push(v)) .done(v => values.push(v)); stream.enumerate(it); setTimeout(() => { assert.equal(values.length, 3); assert.equal(values[0], 2); assert.equal(values[1], 3); assert.equal(values[2], 3); done(); }); }); test("channel", () => { var channel = Rafa.channel(); var stream = Rafa.stream(); var values = []; stream.enumerate(channel).each(v => values.push(v)); channel.write(1); assert.equal(values.length, 1); assert.equal(values[0], 1); }); test("channel backpressure", () => { var channel = Rafa.channel(); var stream = Rafa.stream(); var nested; var values = []; var child = stream.enumerate(channel).flatMap(v => { values.push(v); return nested = Rafa.stream(); }); child.each(v => values.push(v)); // writing once should flow through the flatMap channel.write(1); assert.equal(values.length, 1); assert.equal(values[0], 1); // writing again should drop the write since flatMap hasn't fired assert.equal(channel.write(2), 0); assert.equal(values.length, 1); // write done message from the flatMap nested stream // clears the channel for more writes nested.write(3, true); assert.equal(values.length, 2); assert.equal(values[1], 3); channel.write(4); assert.equal(values.length, 3); assert.equal(values[2], 4); }); }); };