silverbullet/lib/async.test.ts

43 lines
1.3 KiB
TypeScript
Raw Permalink Normal View History

2024-07-30 23:24:17 +08:00
import { assert, assertEquals } from "@std/assert";
import { batchRequests, PromiseQueue, sleep } from "./async.ts";
2023-08-30 03:17:29 +08:00
Deno.test("PromiseQueue test", async () => {
const q = new PromiseQueue();
let r1RanFirst = false;
const r1 = q.runInQueue(async () => {
await sleep(10);
r1RanFirst = true;
// console.log("1");
return 1;
});
const r2 = q.runInQueue(async () => {
// console.log("2");
await sleep(4);
return 2;
});
assertEquals(await Promise.all([r1, r2]), [1, 2]);
assertEquals(r1RanFirst, true);
let wasRun = false;
await q.runInQueue(async () => {
await sleep(4);
wasRun = true;
});
assertEquals(wasRun, true);
});
Deno.test("Batch test", async () => {
// Generate an array with numbers up to 100
const elements = Array.from(Array(100).keys());
const multiplied = await batchRequests(elements, async (batch) => {
await sleep(2);
// Batches should be 9 or smaller (last batch will be smaller)
assert(batch.length <= 9);
return batch.map((e) => e * 2);
}, 9);
assertEquals(multiplied, elements.map((e) => e * 2));
2024-07-30 21:17:34 +08:00
const multiplied2 = await batchRequests(elements, (batch) => {
return Promise.resolve(batch.map((e) => e * 2));
}, 10000);
assertEquals(multiplied2, elements.map((e) => e * 2));
});