import { Queue } from '../queue'; type QueueConstructor = new () => Queue export function testQueue(Queue: QueueConstructor) { it("enqueue should add a new element to the queue", () => { const queue = new Queue(); queue.enqueue(1); expect(queue.length()).toBe(1); }); it("isEmpty should return true on empty queue", () => { const queue = new Queue(); expect(queue.isEmpty()).toBeTruthy(); }); it("isEmpty should return false on not empty queue", () => { const queue = new Queue(); queue.enqueue(1); expect(queue.isEmpty()).toBeFalsy(); }); it("front should return the first value", () => { const queue = new Queue(); queue.enqueue(1); expect(queue.peek()).toBe(1); }); it("front should return null when the queue is empty", () => { const queue = new Queue(); expect(queue.peek()).toBe(null); }); it("length should return the number of elements in the queue", () => { const queue = new Queue(); queue.enqueue(1); queue.enqueue(1); queue.enqueue(1); expect(queue.length()).toBe(3); }); it("dequeue should remove the first element", () => { const queue = new Queue(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); queue.dequeue(); expect(queue.length()).toBe(2); }); it("dequeue should throw error on empty queue", () => { const queue = new Queue(); expect(() => queue.dequeue()).toThrow("Queue Underflow"); }); }