datastructure-ts
Version:
Collection of data structures(LinkedList, DoubleLinkedList, Stack, Queue, Dictionary and etc...) for TypeScript.
146 lines (100 loc) • 3.89 kB
text/typescript
import { DoubleLinkedList } from '../../src/List/DoubleLinkedList';
import { expect } from 'chai';
describe('DoubleLinkedList', () => {
let doubleLinkedList: DoubleLinkedList<number>;
beforeEach(() => {
doubleLinkedList = new DoubleLinkedList<number>();
});
it('constructor', () => {
expect(doubleLinkedList.getHead()).equal(null);
expect(doubleLinkedList.getLast()).equal(null);
});
it('getHead', () => {
expect(doubleLinkedList.getHead()).equal(null);
doubleLinkedList.append(1);
expect(doubleLinkedList.getHead().getValue()).equal(1);
});
it('isEmpty', () => {
expect(doubleLinkedList.isEmpty()).equal(true);
doubleLinkedList.append(1);
expect(doubleLinkedList.isEmpty()).equal(false);
});
it('size', () => {
expect(doubleLinkedList.size()).equal(0);
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
expect(doubleLinkedList.size()).equal(4);
doubleLinkedList.getLast().getPrevious().setNext(null);
expect(doubleLinkedList.size()).equal(3);
});
it('append', () => {
doubleLinkedList.append(1);
expect(doubleLinkedList.getHead().getValue()).equal(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
const someNode = doubleLinkedList.getLast().getPrevious();
expect(someNode.getPrevious().getValue()).equal(1);
expect(someNode.getNext().getValue()).equal(3);
doubleLinkedList.append(4);
expect(doubleLinkedList.getLast().getValue()).equal(4);
});
it('toArray()', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
expect(doubleLinkedList.toArray()).to.deep.equal([1, 2, 3, 4]);
});
it('getLast', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
expect(doubleLinkedList.getLast().getValue()).equal(4);
});
it('insert as first item', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
doubleLinkedList.insertFirst(0);
expect(doubleLinkedList.getHead().getValue()).equal(0);
});
it('insert as last item', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
doubleLinkedList.insertLast(5);
expect(doubleLinkedList.getLast().getValue()).equal(5);
});
it('get item by position', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
expect(doubleLinkedList.get(1).getValue()).equal(2);
});
it('get item by position - out of the range', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
expect(() => doubleLinkedList.get(5)).to.throw(Error);
});
it('get item by position - doubleLinkedList is empty', () => {
expect(doubleLinkedList.get(10)).equal(null);
});
it('inserts value after third element', () => {
doubleLinkedList.append(1);
doubleLinkedList.append(2);
doubleLinkedList.append(3);
doubleLinkedList.append(4);
doubleLinkedList.insert(3, 16);
expect(doubleLinkedList.get(2).getValue()).equal(3);
expect(doubleLinkedList.get(3).getValue()).equal(16);
expect(doubleLinkedList.get(4).getValue()).equal(4);
});
});