From: Stefan Gasser Date: Fri, 16 Jan 2026 16:24:37 +0000 (+0100) Subject: Add edge case tests: unsorted input, chain of 3 overlaps X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=057d636e6d65669da30a88b09da8b9237eb3fcc1;p=sgasser-llm-shield.git Add edge case tests: unsorted input, chain of 3 overlaps --- diff --git a/src/utils/conflict-resolver.test.ts b/src/utils/conflict-resolver.test.ts index fb9140f..ef85a96 100644 --- a/src/utils/conflict-resolver.test.ts +++ b/src/utils/conflict-resolver.test.ts @@ -108,6 +108,30 @@ describe("resolveConflicts", () => { resolveConflicts(entities); expect(entities).toEqual(copy); }); + + test("handles unsorted input", () => { + const entities = [ + { start: 20, end: 25, score: 0.8, entity_type: "PERSON" }, + { start: 0, end: 5, score: 0.9, entity_type: "PERSON" }, + { start: 10, end: 15, score: 0.7, entity_type: "PERSON" }, + ]; + const result = resolveConflicts(entities); + expect(result).toHaveLength(3); + expect(result[0].start).toBeLessThan(result[1].start); + }); + + test("chain of 3 overlapping same type merges to one", () => { + const entities = [ + { start: 0, end: 5, score: 0.9, entity_type: "PERSON" }, + { start: 3, end: 8, score: 0.8, entity_type: "PERSON" }, + { start: 6, end: 12, score: 0.85, entity_type: "PERSON" }, + ]; + const result = resolveConflicts(entities); + expect(result).toHaveLength(1); + expect(result[0].start).toBe(0); + expect(result[0].end).toBe(12); + expect(result[0].score).toBe(0.9); + }); }); describe("resolveOverlaps", () => { @@ -178,4 +202,17 @@ describe("resolveOverlaps", () => { resolveOverlaps(entities); expect(entities).toEqual(copy); }); + + test("handles unsorted input", () => { + const entities = [ + { start: 20, end: 25 }, + { start: 0, end: 5 }, + { start: 10, end: 15 }, + ]; + const result = resolveOverlaps(entities); + expect(result).toHaveLength(3); + expect(result[0].start).toBe(0); + expect(result[1].start).toBe(10); + expect(result[2].start).toBe(20); + }); });