68 lines
1.8 KiB
TypeScript
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");
|
|
});
|
|
})
|