test/specs/generic/utils/array/SortedList.spec.js
describe('SortedList', () => {
it('correctly inserts elements', () => {
const s = new SortedList();
s.add(4);
expect(s.values()).toEqual([4]);
s.add(2);
expect(s.values()).toEqual([2,4]);
s.add(3);
expect(s.values()).toEqual([2,3,4]);
s.add(8);
expect(s.values()).toEqual([2,3,4,8]);
s.add(6);
expect(s.values()).toEqual([2,3,4,6,8]);
s.add(5);
expect(s.values()).toEqual([2,3,4,5,6,8]);
s.add(4);
expect(s.values()).toEqual([2,3,4,4,5,6,8]);
});
it('can clear itself', () => {
const s = new SortedList();
s.add(3);
s.add(1);
s.add(2);
expect(s.length).toBe(3);
s.clear();
expect(s.length).toBe(0);
});
it('can indexOf', () => {
const s = new SortedList();
s.add(3);
s.add(1);
expect(s.indexOf(3)).toBe(1);
expect(s.indexOf(1)).toBe(0);
expect(s.indexOf(2)).toBe(-1);
});
it('can shift', () => {
const s = new SortedList();
s.add(3);
s.add(1);
s.add(2);
expect(s.length).toBe(3);
expect(s.values()).toEqual([1,2,3]);
expect(s.shift()).toBe(1);
expect(s.length).toBe(2);
expect(s.values()).toEqual([2,3]);
});
it('can pop', () => {
const s = new SortedList();
s.add(3);
s.add(1);
s.add(2);
expect(s.length).toBe(3);
expect(s.values()).toEqual([1,2,3]);
expect(s.pop()).toBe(3);
expect(s.length).toBe(2);
expect(s.values()).toEqual([1,2]);
});
it('can remove elements', () => {
const s = new SortedList([1, 2, 3]);
expect(s.length).toBe(3);
expect(s.values()).toEqual([1,2,3]);
s.remove(2);
s.remove(5);
expect(s.length).toBe(2);
expect(s.values()).toEqual([1,3]);
});
it('can be copied', () => {
const s1 = new SortedList([1, 2, 3]);
const s2 = s1.copy();
expect(s1.length).toBe(3);
expect(s1.values()).toEqual([1,2,3]);
expect(s2.length).toBe(3);
expect(s2.values()).toEqual([1,2,3]);
s1.remove(1);
s2.add(4);
expect(s1.length).toBe(2);
expect(s1.values()).toEqual([2,3]);
expect(s2.length).toBe(4);
expect(s2.values()).toEqual([1,2,3,4]);
});
});