Files
utility-closet/tests/queue.test.ts

68 lines
1.8 KiB
TypeScript

import { describe, assert, it } from "vitest";
import Queue from "../pkg/queue";
describe("queue", () => {
it("should enqueue and dequeue items", () => {
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
assert(queue.dequeue() === 1);
assert(queue.dequeue() === 2);
assert(queue.dequeue() === 3);
});
it("should return undefined when dequeueing from an empty queue", () => {
const queue = new Queue();
assert(queue.dequeue() === undefined);
});
it("should return the correct length", () => {
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
assert(queue.length === 3);
});
})
describe("Queue.walk", () => {
it("should walk the queue", async () => {
const queue = new Queue(1, 2, 3);
const result = [];
for await (const chunk of queue.walk({ interval: 0, chunkSize: 2 })) {
result.push(chunk);
}
assert(result[0][0] === 1);
assert(result[0][1] === 2);
assert(result[1][0] === 3);
});
it("should allow for a custom interval", async () => {
const data = Array.from({ length: 100 }).map((_, i) => i);
const queue = new Queue(...data);
const result: number[][] = [];
const generator = queue.walk({ interval: 100, chunkSize: 10 });
const start = Date.now();
for await (const chunk of generator) {
result.push(chunk);
}
const stop = Date.now();
const diff = stop - start;
assert(diff <= 1100 && diff >= 900, `Expected diff in range 900-1100ms, got ${diff.toString()}`);
assert(result.length == 10, "Expected data to be processed in exactly 10 chunks");
});
})