76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert";
|
|
import { CoveredValues } from "./min-covered";
|
|
|
|
describe("CoveredValues", () => {
|
|
it("should initialize with the given min value", () => {
|
|
const covered = new CoveredValues(5);
|
|
assert.strictEqual(covered.min, 5);
|
|
});
|
|
|
|
it("should add values greater than min", () => {
|
|
const covered = new CoveredValues(0);
|
|
covered.add(3);
|
|
assert.strictEqual(covered.min, 0);
|
|
covered.add(1);
|
|
assert.strictEqual(covered.min, 1);
|
|
covered.add(4);
|
|
assert.strictEqual(covered.min, 1);
|
|
covered.add(2);
|
|
assert.strictEqual(covered.min, 4);
|
|
});
|
|
|
|
it("should ignore duplicate values", () => {
|
|
const covered = new CoveredValues(0);
|
|
covered.add(3);
|
|
covered.add(3);
|
|
covered.add(3);
|
|
assert.strictEqual(covered.min, 0);
|
|
covered.add(1);
|
|
covered.add(2);
|
|
assert.strictEqual(covered.min, 3);
|
|
});
|
|
|
|
it("should handle multiple consecutive values", () => {
|
|
const covered = new CoveredValues(132);
|
|
for (let i = 250; i > 132; i--) {
|
|
assert.strictEqual(covered.min, 132);
|
|
covered.add(i);
|
|
}
|
|
assert.strictEqual(covered.min, 250);
|
|
});
|
|
|
|
it("should handle adding values lower than current min", () => {
|
|
const covered = new CoveredValues(5);
|
|
covered.add(3);
|
|
assert.strictEqual(covered.min, 5);
|
|
covered.add(6);
|
|
assert.strictEqual(covered.min, 6);
|
|
});
|
|
|
|
it("should auto-advance when setting min value", () => {
|
|
const covered = new CoveredValues(5);
|
|
covered.add(7);
|
|
covered.add(8);
|
|
covered.add(9);
|
|
assert.strictEqual(covered.min, 5);
|
|
// Setting min to 6 should auto-advance through 7, 8, 9
|
|
covered.min = 6;
|
|
assert.strictEqual(covered.min, 9);
|
|
covered.add(10);
|
|
assert.strictEqual(covered.min, 10);
|
|
});
|
|
|
|
it("should handle setting min value with no consecutive values", () => {
|
|
const covered = new CoveredValues(5);
|
|
covered.add(10);
|
|
covered.add(15);
|
|
assert.strictEqual(covered.min, 5);
|
|
// Setting min to 8 should not auto-advance (no consecutive values)
|
|
covered.min = 8;
|
|
assert.strictEqual(covered.min, 8);
|
|
// Add 9 to trigger auto-advance to 10
|
|
covered.add(9);
|
|
assert.strictEqual(covered.min, 10);
|
|
});
|
|
});
|