UNPKG

asclasit

Version:

ASync CLasses + ASync ITerators

69 lines (61 loc) 2.28 kB
const PQ = require('./priority-queue'); test('$.PQ: priority queue', () => { const pq = new PQ({reverse: true}); expect(pq.pop()).toBe(undefined); expect(pq.push(1, 7, 4, 9)).toBe(4); expect(pq.push(2)).toBe(5); expect(pq.pop()).toBe(9); expect(pq.pop()).toBe(7); expect(pq.pop()).toBe(4); expect(Array.from(pq)).toEqual([2, 1]); expect(pq.toArray()).toEqual([]); }); test('$.PQ: add', () => { const pq = new PQ(); pq.add([6, 2, 1, 9, 0]); expect(pq.toArray({reverse: true})).toEqual([0, 1, 2, 6, 9]); }); test('$.PQ: from', () => { const pq = PQ.from([6, 2, 1, 9, 0]); pq.pushOne(-1); expect(Array.from(pq)).toEqual([-1, 0, 1, 2, 6, 9]); }); test('$.PQ.Limited: priority queue', () => { const pq = new PQ.Limited(); expect(pq.pop()).toBe(undefined); expect(pq.push(1, 7, 4, 9)).toBe(4); expect(pq.push(2)).toBe(5); expect(pq.pop()).toBe(1); expect(pq.pop()).toBe(2); expect(pq.pop()).toBe(4); expect(Array.from(pq)).toEqual([7, 9]); expect(pq.toArray()).toEqual([]); }); test('$.PQ.Limited: limited priority queue: ascending', () => { const pq = new PQ.Limited({reverse: true, limit: 4}); expect(pq.size).toBe(0); expect(pq.isEmpty).toBe(true); expect(pq.push(5, 2, 8, 0, 10, 6)).toBe(4); expect(pq.size).toBe(4); expect(pq.isEmpty).toBe(false); expect(pq.top).toBe(6); expect(pq.peek()).toBe(6); expect(pq.raw).toEqual([6, 2, 5, 0]); expect(pq.toArray({reverse: true, keep: true})).toEqual([6, 5, 2, 0]); expect(pq.toArray({sort: (a, b) => a & 1 ? (b & 1 ? a - b : 1) : (b & 1 ? -1 : a - b), keep: true})).toEqual([0, 2, 6, 5]); expect(pq.toArray()).toEqual([0, 2, 5, 6]); }); test('$.PQ.Limited: limited priority queue: descending', () => { const pq = new PQ.Limited({limit: 4}); expect(pq.length).toBe(0); expect(pq.isEmpty).toBe(true); expect(pq.push(5, 2, 8, 0, 10, 6)).toBe(4); expect(pq.length).toBe(4); expect(pq.isEmpty).toBe(false); expect(pq.top).toBe(5); expect(pq.peek()).toBe(5); expect(pq.raw).toEqual([5, 6, 8, 10]); expect(pq.toArray({reverse: true, keep: true})).toEqual([5, 6, 8, 10]); expect(pq.toArray({sort: (a, b) => a & 1 ? (b & 1 ? a - b : 1) : (b & 1 ? -1 : a - b), keep: true})).toEqual([6, 8, 10, 5]); expect(pq.toArray()).toEqual([10, 8, 6, 5]); });