Optimize the append method to check if the data is already sorted

This commit is contained in:
2025-07-02 18:43:41 -04:00
parent db506e8b1f
commit 220b402b3b
2 changed files with 33 additions and 3 deletions

View File

@@ -69,6 +69,31 @@ describe("CircularQueue", () => {
expect(queue.size()).toBe(1);
expect(queue.get(0)).toEqual(testItems.test);
});
it("optimizes append when items are already in order", () => {
const queue = new CircularQueue<TestItem>(5);
let sortCallCount = 0;
const trackingSortCallback = (a: TestItem, b: TestItem) => {
sortCallCount++;
return a.id - b.id;
};
queue.appendWithSorting(testItems.first, trackingSortCallback);
expect(sortCallCount).toBe(0);
queue.appendWithSorting(testItems.second, trackingSortCallback);
expect(sortCallCount).toBe(1);
queue.appendWithSorting(testItems.third, trackingSortCallback);
expect(sortCallCount).toBe(2);
queue.appendWithSorting({ id: 0, value: "zero" }, trackingSortCallback);
expect(sortCallCount).toBeGreaterThan(3);
expect(queue.get(0)).toEqual({ id: 0, value: "zero" });
expect(queue.get(1)).toEqual(testItems.first);
});
});
describe("popFront", () => {
@@ -150,7 +175,7 @@ describe("CircularQueue", () => {
it("maintains sorted order assumption", () => {
const queue = createQueueWithItems(5, [testItems.d, testItems.a, testItems.c, testItems.b], sortingCallbacks.byValue);
expect(queue.binarySearch("a", keyExtractors.value)).toEqual(testItems.a);
expect(queue.binarySearch("b", keyExtractors.value)).toEqual(testItems.b);
expect(queue.binarySearch("c", keyExtractors.value)).toEqual(testItems.c);
@@ -173,4 +198,4 @@ describe("CircularQueue", () => {
expect(queue.binarySearch(4, keyExtractors.id)).toEqual(testItems.fourth);
});
});
});
});