Home Reference Source Test

test/specs/generic/utils/array/UniqueQueue.spec.js

describe('UniqueQueue', () => {
    it('correctly dequeues elements', () => {
        const q = new UniqueQueue();

        expect(q.length).toBe(0);

        q.enqueue(3);
        q.enqueue(1);
        q.enqueue(2);

        expect(q.length).toBe(3);
        expect(q.dequeue()).toBe(3);
        expect(q.length).toBe(2);
        expect(q.dequeue()).toBe(1);
        expect(q.length).toBe(1);
        expect(q.dequeue()).toBe(2);
        expect(q.length).toBe(0);
    });

    it('can clear itself', () => {
        const q = new UniqueQueue();

        q.enqueue(3);
        q.enqueue(1);
        q.enqueue(2);

        expect(q.length).toBe(3);
        q.clear();
        expect(q.length).toBe(0);
        expect(q.dequeue()).toBeFalsy();
    });

    it('can peek', () => {
        const q = new UniqueQueue();

        q.enqueue(3);
        q.enqueue(1);

        expect(q.peek()).toBe(3);
        q.dequeue();
        expect(q.peek()).toBe(1);
        q.dequeue();
        expect(q.peek()).toBeFalsy();
    });

    it('can dequeueMulti', () => {
        const q = new UniqueQueue();

        q.enqueue(3);
        q.enqueue(1);
        q.enqueue(2);

        expect(q.dequeueMulti(2)).toEqual([3, 1]);
        expect(q.dequeueMulti(2)).toEqual([2]);
        expect(q.dequeueMulti(2)).toEqual([]);
    });

    it('can enqueue unique', () => {
        const q = new UniqueQueue();

        q.enqueue(3);
        q.enqueue(1);
        q.enqueue(2);
        q.enqueue(3);
        q.enqueue(2);

        expect(q.length).toBe(3);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(1);
        expect(q.dequeue()).toBe(2);
    });

    it('can enqueueAll', () => {
        const q = new UniqueQueue();

        q.enqueueAll([3, 1, 2]);
        q.enqueueAll([3, 2, 4]);

        expect(q.length).toBe(4);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(1);
        expect(q.dequeue()).toBe(2);
        expect(q.dequeue()).toBe(4);
    });

    it('can enqueueAll (2)', () => {
        const q = new UniqueQueue();

        q.enqueueAll([3, 1, 2]);
        q.dequeue();
        q.enqueueAll([3, 2, 4]);

        expect(q.length).toBe(4);
        expect(q.dequeue()).toBe(1);
        expect(q.dequeue()).toBe(2);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(4);
    });

    it('can enqueueAll (3)', () => {
        const q = new UniqueQueue();

        q.enqueueAll([3, 1, 3, 1, 3]);
        q.dequeue();
        q.dequeue();
        q.enqueueAll([3, 4, 1]);

        expect(q.length).toBe(3);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(4);
        expect(q.dequeue()).toBe(1);
    });


    it('can enqueueAll (4)', () => {
        const q = new UniqueQueue();

        q.enqueueAll([3, 1, 3, 1, 3]);
        q.dequeue();
        q.enqueueAll([3, 4, 1]);

        expect(q.length).toBe(3);
        expect(q.dequeue()).toBe(1);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(4);
    });

    it('can enqueueAll (5)', () => {
        const q = new UniqueQueue();

        q.enqueueAll([3, 1, 3, 1, 3]);
        q.dequeueMulti(2);
        q.enqueueAll([3, 4, 1]);

        expect(q.length).toBe(3);
        expect(q.dequeue()).toBe(3);
        expect(q.dequeue()).toBe(4);
        expect(q.dequeue()).toBe(1);
    });

    it('can remove', () => {
        const q = new UniqueQueue();
        q.enqueueAll([3, 1, 2, 4, 5]);
        q.remove(2);
        q.remove(3);
        q.remove(5);
        q.remove(9);
        expect(q.length).toBe(2);

        expect(q.dequeue()).toBe(1);
        expect(q.dequeue()).toBe(4);
    });
});