1. class Queue {
  2. constructor() {
  3. this.items = [];
  4. }
  5. enqueue(item) {
  6. this.items.push(item);
  7. }
  8. dequeue() {
  9. return this.items.shift();
  10. }
  11. isEmpty() {
  12. return this.items.length === 0;
  13. }
  14. size() {
  15. return this.items.length;
  16. }
  17. }
  18. class QueuePerformance {
  19. constructor(queue) {
  20. this.queue = queue;
  21. this.startTime = null;
  22. this.endTime = null;
  23. this.operations = [];
  24. }
  25. start() {
  26. this.startTime = performance.now();
  27. }
  28. stop() {
  29. this.endTime = performance.now();
  30. }
  31. measureEnqueue(count, dryRun = false) {
  32. if (dryRun) {
  33. console.log(`Dry Run: Would enqueue ${count} items.`);
  34. return;
  35. }
  36. this.operations.push({ type: 'enqueue', count: count });
  37. for (let i = 0; i < count; i++) {
  38. this.queue.enqueue(i);
  39. }
  40. }
  41. measureDequeue(count, dryRun = false) {
  42. if (dryRun) {
  43. console.log(`Dry Run: Would dequeue ${count} items.`);
  44. return;
  45. }
  46. this.operations.push({ type: 'dequeue', count: count });
  47. let dequeuedItems = [];
  48. for (let i = 0; i < count; i++) {
  49. dequeuedItems.push(this.queue.dequeue());
  50. }
  51. return dequeuedItems;
  52. }
  53. measureSize(dryRun = false) {
  54. if (dryRun) {
  55. console.log("Dry Run: Would measure queue size.");
  56. return;
  57. }
  58. this.operations.push({ type: 'size' });
  59. const size = this.queue.size();
  60. return size;
  61. }
  62. getResults() {
  63. if (!this.startTime || !this.endTime) {
  64. console.error("Performance measurement not started. Call start() and stop().");
  65. return null;
  66. }
  67. const duration = (this.endTime - this.startTime) / 1000; // in seconds
  68. return {
  69. duration: duration,
  70. enqueueOperations: this.operations.filter(op => op.type === 'enqueue'),
  71. dequeueOperations: this.operations.filter(op => op.type === 'dequeue'),
  72. sizeOperations: this.operations.filter(op => op.type === 'size')
  73. };
  74. }
  75. }
  76. // Example Usage (Manual Execution)
  77. // const myQueue = new Queue();
  78. // const performance = new QueuePerformance(myQueue);
  79. // performance.start();
  80. // performance.measureEnqueue(1000, true); // Dry run
  81. // performance.measureEnqueue(1000, false); // Actual measurement
  82. // performance.measureDequeue(500, true); // Dry run
  83. // performance.measureDequeue(500, false); // Actual measurement
  84. // performance.measureSize(true); // Dry run
  85. // performance.measureSize(false); // Actual measurement
  86. // performance.stop();
  87. // const results = performance.getResults();
  88. // console.log(results);

Add your comment