Skip to content

Commit e4de8ff

Browse files
feat(transducers-async): add range() & tests
1 parent 5fdc04f commit e4de8ff

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

packages/transducers-async/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export * from "./multiplex.js";
1414
export * from "./multiplex-obj.js";
1515
export * from "./partition.js";
1616
export * from "./push.js";
17+
export * from "./range.js";
1718
export * from "./reduce.js";
1819
export * from "./repeatedly.js";
1920
export * from "./run.js";
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { delayed } from "@thi.ng/compose/delayed";
2+
import { Range } from "@thi.ng/transducers/range";
3+
4+
/**
5+
* Async version of [thi.ng/transducers
6+
* range()](https://docs.thi.ng/umbrella/transducers/functions/range-1.html),
7+
* taking an additional `delay` argument for specifying the number of
8+
* milliseconds between each generated value.
9+
*
10+
* @param delay
11+
*/
12+
export function range(delay: number): AsyncIterableIterator<number>;
13+
export function range(to: number, delay: number): AsyncIterableIterator<number>;
14+
export function range(
15+
from: number,
16+
to: number,
17+
delay: number
18+
): AsyncIterableIterator<number>;
19+
export function range(
20+
from: number,
21+
to: number,
22+
step: number,
23+
delay: number
24+
): AsyncIterableIterator<number>;
25+
export async function* range(...args: number[]) {
26+
const delay = args.pop()!;
27+
for (let x of new Range(...(<[number]>args))) {
28+
yield x;
29+
await delayed(null, delay);
30+
}
31+
}

packages/transducers-async/test/main.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
multiplexObj,
1212
partition,
1313
push,
14+
range,
1415
repeatedly,
1516
run,
1617
step,
@@ -151,6 +152,16 @@ test("partition", async (done) => {
151152
done();
152153
});
153154

155+
test("range", async (done) => {
156+
expect(await push(take(3, range(5)))).toEqual([0, 1, 2]);
157+
expect(await push(range(3, 5))).toEqual([0, 1, 2]);
158+
expect(await push(range(1, 3, 5))).toEqual([1, 2]);
159+
expect(await push(range(1, 10, 2, 5))).toEqual([1, 3, 5, 7, 9]);
160+
expect(await push(range(3, 0, 5))).toEqual([3, 2, 1]);
161+
expect(await push(range(10, -1, -3, 5))).toEqual([10, 7, 4, 1]);
162+
done();
163+
});
164+
154165
test("repeatedly", async (done) => {
155166
expect(await push(repeatedly(async (i) => i * 10, 3, 10))).toEqual([
156167
0, 10, 20,

0 commit comments

Comments
 (0)