43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { assert, assertEquals } from "../../test_deps.ts";
|
|
import { batchRequests, PromiseQueue, sleep } from "./async.ts";
|
|
|
|
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));
|
|
const multiplied2 = await batchRequests(elements, async (batch) => {
|
|
return batch.map((e) => e * 2);
|
|
}, 10000);
|
|
assertEquals(multiplied2, elements.map((e) => e * 2));
|
|
});
|