linked-list-lib
Version:
This package contain some possibilities of implementations of linked lists
157 lines (156 loc) • 6.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const doublyLinkedList = new index_1.DoublyLinkedList();
const dataArray = [{ name: 'A' }, { name: 'B' }, { name: 'C' }];
let listSize = 0;
describe('[DLL] Testing null list', () => {
test('[DLL] insertInBegin', () => {
let list = doublyLinkedList.traverse();
expect(list.length).toBe(0);
expect(doublyLinkedList.size()).toBe(0);
let foundNode = doublyLinkedList.search(dataArray[0]);
expect(foundNode).toBeNull();
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('NULL');
let deletedNode = doublyLinkedList.deleteNode(dataArray[0]);
expect(deletedNode).toBeNull();
result = doublyLinkedList.print('name');
});
});
describe('[DLL] Testing insertInBegin()', () => {
test('[DLL] insertInBegin', () => {
let list = [];
for (const data of dataArray) {
doublyLinkedList.insertInBegin(data);
listSize++;
list = doublyLinkedList.traverse();
expect(list.length).toBe(listSize);
expect(doublyLinkedList.size()).toBe(listSize);
}
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> B -> A -> NULL');
});
});
describe('[DLL] Testing deleteNode()', () => {
test('[DLL] delete first node', () => {
let deletedNode = doublyLinkedList.deleteNode(dataArray[2]);
listSize--;
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:B -> A -> NULL');
expect(dataArray[2]).toMatchObject(deletedNode.data);
expect(deletedNode).toHaveProperty('data.name', dataArray[2].name);
expect(doublyLinkedList.size()).toBe(listSize);
});
test('[DLL] delete middle node', () => {
doublyLinkedList.insertInBegin(dataArray[2]);
listSize++;
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> B -> A -> NULL');
expect(doublyLinkedList.size()).toBe(listSize);
let deletedNode = doublyLinkedList.deleteNode(dataArray[1]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> A -> NULL');
listSize--;
expect(dataArray[1]).toMatchObject(deletedNode.data);
expect(deletedNode).toHaveProperty('data.name', dataArray[1].name);
expect(doublyLinkedList.size()).toBe(listSize);
});
test('[DLL] delete last node', () => {
doublyLinkedList.insertInBegin(dataArray[1]);
listSize++;
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:B -> C -> A -> NULL');
expect(doublyLinkedList.size()).toBe(listSize);
let deletedNode = doublyLinkedList.deleteNode(dataArray[0]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:B -> C -> NULL');
listSize--;
expect(dataArray[0]).toMatchObject(deletedNode.data);
expect(deletedNode).toHaveProperty('data.name', dataArray[0].name);
expect(doublyLinkedList.size()).toBe(listSize);
});
test('[DLL] delete all nodes', () => {
doublyLinkedList.insertInBegin(dataArray[0]);
listSize++;
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:A -> B -> C -> NULL');
expect(doublyLinkedList.size()).toBe(listSize);
let deletedNode = doublyLinkedList.deleteNode(dataArray[0]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:B -> C -> NULL');
listSize--;
deletedNode = doublyLinkedList.deleteNode(dataArray[1]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> NULL');
listSize--;
deletedNode = doublyLinkedList.deleteNode(dataArray[2]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('NULL');
listSize--;
expect(dataArray[2]).toMatchObject(deletedNode.data);
expect(deletedNode).toHaveProperty('data.name', dataArray[2].name);
expect(doublyLinkedList.size()).toBe(listSize);
});
});
describe('[DLL] Testing deleteFirstNode()', () => {
test('[DLL] deleteFirstNode', () => {
for (const data of dataArray) {
doublyLinkedList.insertInBegin(data);
}
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> B -> A -> NULL');
let deletedNode = doublyLinkedList.deleteFirstNode();
expect(deletedNode.data).toBe(dataArray[2]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:B -> A -> NULL');
deletedNode = doublyLinkedList.deleteFirstNode();
expect(deletedNode.data).toBe(dataArray[1]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:A -> NULL');
deletedNode = doublyLinkedList.deleteFirstNode();
expect(deletedNode.data).toBe(dataArray[0]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('NULL');
});
});
describe('[DLL] Testing deleteLastNode()', () => {
test('[DLL] deleteLastNode', () => {
for (const data of dataArray) {
doublyLinkedList.insertInBegin(data);
}
let result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> B -> A -> NULL');
let deletedNode = doublyLinkedList.deleteLastNode();
expect(deletedNode.data).toBe(dataArray[0]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> B -> NULL');
deletedNode = doublyLinkedList.deleteLastNode();
expect(deletedNode.data).toBe(dataArray[1]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('[HEAD]:C -> NULL');
deletedNode = doublyLinkedList.deleteLastNode();
expect(deletedNode.data).toBe(dataArray[2]);
result = doublyLinkedList.print('name');
expect(result).toBeDefined();
expect(result).toEqual('NULL');
});
});