js-singly-linked-list
Version:
Singly Linked List Implemented in Javascript
109 lines (108 loc) • 4.03 kB
JavaScript
;
const chai = require('chai');
chai.should();
let SinglyLinkedList = require('./index');
describe('Singly Linked List', () => {
let list;
beforeEach(() => {
list = new SinglyLinkedList();
[1, 2, 3, 4, 5].forEach(el => list.push(el));
});
describe('Instantiation', () => {
it('Should return the instance of Singly Linked List', () => {
(typeof list).should.be.equals('object');
(typeof list.length).should.be.equals('number');
});
it('Instances and Values', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.get(1).value.should.be.equals(2);
(list.get(-1) === null).should.be.equals(true);
(list.get(10) === null).should.be.equals(true);
});
it('Push Method', () => {
list.length.should.be.equals(5);
(list.get(5) === null).should.be.equals(true);
list.push(10);
list.length.should.be.equals(6);
list.get(5).value.should.be.equals(10);
(list.push() === null).should.be.equals(true);
});
it('Pop Method', () => {
list.length.should.be.equals(5);
list.get(4).value.should.be.equals(5);
list.pop();
list.length.should.be.equals(4);
(list.get(4) === null).should.be.equals(true);
let tempList = new SinglyLinkedList();
tempList.push(1);
tempList.pop();
(tempList.pop() === undefined).should.be.equals(true);
});
it('Shift Method', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.shift();
list.length.should.be.equals(4);
list.get(0).value.should.be.equals(2);
let tempList = new SinglyLinkedList();
(tempList.shift() === undefined).should.be.equals(true);
tempList.push(1);
tempList.shift().value.should.be.equals(1);
});
it('unShift Method', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.unShift(10);
list.length.should.be.equals(6);
list.get(0).value.should.be.equals(10);
(list.unShift() === undefined).should.be.equals(true);
let tempList = new SinglyLinkedList();
(tempList.unShift(5).head.value === 5).should.be.equals(true);
});
it('Insert Method', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.insert(0, 10);
list.length.should.be.equals(6);
list.get(0).value.should.be.equals(10);
(list.insert(-1, 20) === false).should.be.equals(true);
(list.insert(6, 20) === true).should.be.equals(true);
(list.insert(2, 15) === true).should.be.equals(true);
});
it('Set Method', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.set(0, 10);
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(10);
(list.set(10, 20) === false).should.be.equals(true);
});
it('remove Method', () => {
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(1);
list.remove(0);
list.length.should.be.equals(4);
list.get(0).value.should.be.equals(2);
(list.remove(-1) === undefined).should.be.equals(true);
(list.remove(0).value === 2).should.be.equals(true);
(list.remove(2).value === 5).should.be.equals(true);
list.push(10);
list.push(20);
list.push(40);
(list.remove(1).value === 4).should.be.equals(true);
});
it('reverse Method', () => {
list.reverse();
list.length.should.be.equals(5);
list.get(0).value.should.be.equals(5);
list.get(1).value.should.be.equals(4);
list.get(2).value.should.be.equals(3);
list.get(3).value.should.be.equals(2);
list.get(4).value.should.be.equals(1);
let tempList = new SinglyLinkedList();
tempList.push(1);
tempList.reverse();
});
});
});