UNPKG

@v4fire/core

Version:
81 lines (80 loc) 3.08 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _linkedList = _interopRequireDefault(require("../../core/linked-list")); describe('core/linked-list', () => { it('should return the first value from the list', () => { const list = new _linkedList.default([1, 2, 3]); expect(list.first).toBe(1); list.shift(); expect(list.first).toBe(2); list.unshift(0); expect(list.first).toBe(0); }); it('should return the last value from the list', () => { const list = new _linkedList.default([1, 2, 3]); expect(list.last).toBe(3); list.pop(); expect(list.last).toBe(2); list.push(4); expect(list.last).toBe(4); }); it('should return the list length', () => { const list = new _linkedList.default([1, 2, 3]); expect(list.length).toBe(3); list.pop(); expect(list.length).toBe(2); list.push(4); expect(list.length).toBe(3); }); it('should implement Array-Like add/remove API', () => { const list = new _linkedList.default([1, 2, 3]); expect(list.pop()).toBe(3); expect(list.shift()).toBe(1); expect(list.push(4)).toBe(list.length); expect(list.pop()).toBe(4); expect(list.unshift(0)).toBe(list.length); expect(list.shift()).toBe(0); }); it('should implement Array-Like slice API', () => { const a = {}, list = new _linkedList.default([a, 2, 3]); expect(list.slice()).not.toBe(list); expect([...list.slice()]).toEqual([a, 2, 3]); expect(list.slice().first).toBe(a); expect([...list.slice(1)]).toEqual([2, 3]); expect([...list.slice(-1)]).toEqual([3]); expect([...list.slice(0, -1)]).toEqual([a, 2]); expect([...list.slice(0, -12)]).toEqual([]); expect([...list.slice(1, 2)]).toEqual([2]); expect([...list.slice(2, 1)]).toEqual([]); }); it('should implement Array-Like includes API', () => { const list = new _linkedList.default([-0, 1, NaN, 3]); expect(list.includes(0)).toBe(true); expect(list.includes(1)).toBe(true); expect(list.includes(NaN)).toBe(true); expect(list.includes(10)).toBe(false); }); it('should implement the iterable API', () => { const list = new _linkedList.default([1, 2, 3]); expect(Object.isIterable(list)).toBe(true); expect(Object.isIterator(list.values())).toBe(true); expect([...list]).toEqual([1, 2, 3]); expect([...list.values()]).toEqual([1, 2, 3]); }); it('calling `reverse` must return a reversed iterator', () => { const list = new _linkedList.default([1, 2, 3]); expect(Object.isIterator(list.reverse())).toBe(true); expect([...list.reverse()]).toEqual([3, 2, 1]); expect([...new _linkedList.default(list.reverse())]).toEqual([3, 2, 1]); }); it('calling `clear` should clear the list', () => { const list = new _linkedList.default([1, 2, 3]); list.clear(); expect(list.first).toBeUndefined(); expect(list.last).toBeUndefined(); expect(list.length).toBe(0); expect([...list]).toEqual([]); expect([...list.reverse()]).toEqual([]); }); });