// PerformanceTest.test.ts
import { SinglyLinkedList } from "../data_structure/SinglyLinkedList";
import { DoublyLinkedList } from "../data_structure/DoublyLinkedList";
function measurePerformance(callback: () => void, iterations: number): number {
const start = performance.now();
for (let i = 0; i < iterations; i++) {
callback();
}
const end = performance.now();
return end - start;
}
describe("PerformanceTest", () => {
const iterations = 1000;
const testData = Array.from({ length: iterations }, (_, i) => i);
test("Singly Linked List performance", () => {
const singlyList = new SinglyLinkedList<number>();
const singlyAddTime = measurePerformance(() => {
singlyList.addLast(Math.random());
}, iterations);
const singlyFindTime = measurePerformance(() => {
singlyList.find(testData[Math.floor(Math.random() * testData.length)]);
}, iterations);
const singlyRemoveTime = measurePerformance(() => {
singlyList.removeLast();
}, iterations);
console.log("Singly Linked List:");
console.log(`Add Time: ${singlyAddTime.toFixed(2)} ms`);
console.log(`Find Time: ${singlyFindTime.toFixed(2)} ms`);
console.log(`Remove Time: ${singlyRemoveTime.toFixed(2)} ms`);
expect(singlyAddTime).toBeGreaterThanOrEqual(0);
expect(singlyFindTime).toBeGreaterThanOrEqual(0);
expect(singlyRemoveTime).toBeGreaterThanOrEqual(0);
});
test("Doubly Linked List performance", () => {
const doublyList = new DoublyLinkedList<number>();
const doublyAddTime = measurePerformance(() => {
doublyList.addLast(Math.random());
}, iterations);
const doublyFindTime = measurePerformance(() => {
doublyList.find(testData[Math.floor(Math.random() * testData.length)]);
}, iterations);
const doublyRemoveTime = measurePerformance(() => {
doublyList.removeLast();
}, iterations);
console.log("\nDoubly Linked List:");
console.log(`Add Time: ${doublyAddTime.toFixed(2)} ms`);
console.log(`Find Time: ${doublyFindTime.toFixed(2)} ms`);
console.log(`Remove Time: ${doublyRemoveTime.toFixed(2)} ms`);
expect(doublyAddTime).toBeGreaterThanOrEqual(0);
expect(doublyFindTime).toBeGreaterThanOrEqual(0);
expect(doublyRemoveTime).toBeGreaterThanOrEqual(0);
});
});
Singly Linked List
Doubly Linked List