class Queue {
constructor() {
this.items = [];
}
enqueue(item) {
this.items.push(item);
}
dequeue() {
return this.items.shift();
}
isEmpty() {
return this.items.length === 0;
}
size() {
return this.items.length;
}
}
class QueuePerformance {
constructor(queue) {
this.queue = queue;
this.startTime = null;
this.endTime = null;
this.operations = [];
}
start() {
this.startTime = performance.now();
}
stop() {
this.endTime = performance.now();
}
measureEnqueue(count, dryRun = false) {
if (dryRun) {
console.log(`Dry Run: Would enqueue ${count} items.`);
return;
}
this.operations.push({ type: 'enqueue', count: count });
for (let i = 0; i < count; i++) {
this.queue.enqueue(i);
}
}
measureDequeue(count, dryRun = false) {
if (dryRun) {
console.log(`Dry Run: Would dequeue ${count} items.`);
return;
}
this.operations.push({ type: 'dequeue', count: count });
let dequeuedItems = [];
for (let i = 0; i < count; i++) {
dequeuedItems.push(this.queue.dequeue());
}
return dequeuedItems;
}
measureSize(dryRun = false) {
if (dryRun) {
console.log("Dry Run: Would measure queue size.");
return;
}
this.operations.push({ type: 'size' });
const size = this.queue.size();
return size;
}
getResults() {
if (!this.startTime || !this.endTime) {
console.error("Performance measurement not started. Call start() and stop().");
return null;
}
const duration = (this.endTime - this.startTime) / 1000; // in seconds
return {
duration: duration,
enqueueOperations: this.operations.filter(op => op.type === 'enqueue'),
dequeueOperations: this.operations.filter(op => op.type === 'dequeue'),
sizeOperations: this.operations.filter(op => op.type === 'size')
};
}
}
// Example Usage (Manual Execution)
// const myQueue = new Queue();
// const performance = new QueuePerformance(myQueue);
// performance.start();
// performance.measureEnqueue(1000, true); // Dry run
// performance.measureEnqueue(1000, false); // Actual measurement
// performance.measureDequeue(500, true); // Dry run
// performance.measureDequeue(500, false); // Actual measurement
// performance.measureSize(true); // Dry run
// performance.measureSize(false); // Actual measurement
// performance.stop();
// const results = performance.getResults();
// console.log(results);
Add your comment