From 0abd50ac0cf50a0f4ecffe54c58ea31952073365 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Tue, 8 Apr 2025 23:00:44 +0100 Subject: [PATCH] Add force setting to MinCovered --- frontend/sync-client/src/utils/min-covered.test.ts | 12 ++++++++++++ frontend/sync-client/src/utils/min-covered.ts | 13 +++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/frontend/sync-client/src/utils/min-covered.test.ts b/frontend/sync-client/src/utils/min-covered.test.ts index f53c8cd..429f7a6 100644 --- a/frontend/sync-client/src/utils/min-covered.test.ts +++ b/frontend/sync-client/src/utils/min-covered.test.ts @@ -45,4 +45,16 @@ describe("CoveredValues", () => { covered.add(6); expect(covered.min).toBe(6); }); + + test("should handle force setting min value", () => { + const covered = new CoveredValues(5); + covered.add(7); + covered.add(8); + covered.add(9); + expect(covered.min).toBe(5); + covered.min = 6; + expect(covered.min).toBe(6); + covered.add(10); + expect(covered.min).toBe(10); + }); }); diff --git a/frontend/sync-client/src/utils/min-covered.ts b/frontend/sync-client/src/utils/min-covered.ts index 5bdf3ec..c453ef8 100644 --- a/frontend/sync-client/src/utils/min-covered.ts +++ b/frontend/sync-client/src/utils/min-covered.ts @@ -18,6 +18,15 @@ export class CoveredValues { public constructor(private minValue: number) {} + public get min(): number { + return this.minValue; + } + + public set min(value: number) { + this.minValue = Math.max(value, this.minValue); + this.seenValues = this.seenValues.filter((v) => v > value); + } + public add(value: number): void { if (value < this.minValue) { return; @@ -44,8 +53,4 @@ export class CoveredValues { this.minValue++; } } - - public get min(): number { - return this.minValue; - } }