File size: 3,059 Bytes
21dd449 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import { describe, it, expect } from "vitest";
import { RangeList } from "./RangeList";
describe("RangeList", () => {
it("should add a single range", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
const ranges = rangeList.getAllRanges();
expect(ranges).toHaveLength(1);
expect(ranges[0]).toEqual({
start: 1,
end: 100,
refCount: 1,
data: null,
});
});
it("should handle overlapping ranges", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
rangeList.add(30, 50);
const ranges = rangeList.getAllRanges();
expect(ranges).toHaveLength(3);
expect(ranges).toEqual([
{ start: 1, end: 30, refCount: 1, data: null },
{ start: 30, end: 50, refCount: 2, data: null },
{ start: 50, end: 100, refCount: 1, data: null },
]);
});
it("should remove a range at existing boundaries", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
rangeList.add(30, 50);
rangeList.remove(30, 50);
const ranges = rangeList.getAllRanges();
expect(ranges).toHaveLength(3);
expect(ranges).toEqual([
{ start: 1, end: 30, refCount: 1, data: null },
{ start: 30, end: 50, refCount: 1, data: null },
{ start: 50, end: 100, refCount: 1, data: null },
]);
});
it("should throw error when removing range at non-existing boundaries", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
rangeList.add(30, 50);
expect(() => rangeList.remove(2, 50)).toThrow("Range boundaries must match existing boundaries");
});
it("should get ranges within boundaries", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
rangeList.add(30, 50);
const ranges = rangeList.getRanges(30, 100);
expect(ranges).toHaveLength(2);
expect(ranges).toEqual([
{ start: 30, end: 50, refCount: 2, data: null },
{ start: 50, end: 100, refCount: 1, data: null },
]);
});
it("should throw error when end is less than or equal to start", () => {
const rangeList = new RangeList();
expect(() => rangeList.add(100, 1)).toThrow("End must be greater than start");
expect(() => rangeList.add(1, 1)).toThrow("End must be greater than start");
expect(() => rangeList.remove(100, 1)).toThrow("End must be greater than start");
expect(() => rangeList.remove(1, 1)).toThrow("End must be greater than start");
expect(() => rangeList.getRanges(100, 1)).toThrow("End must be greater than start");
expect(() => rangeList.getRanges(1, 1)).toThrow("End must be greater than start");
});
it("should handle multiple overlapping ranges", () => {
const rangeList = new RangeList();
rangeList.add(1, 100);
rangeList.add(30, 50);
rangeList.add(40, 60);
const ranges = rangeList.getAllRanges();
expect(ranges).toHaveLength(5);
expect(ranges).toEqual([
{ start: 1, end: 30, refCount: 1, data: null },
{ start: 30, end: 40, refCount: 2, data: null },
{ start: 40, end: 50, refCount: 3, data: null },
{ start: 50, end: 60, refCount: 2, data: null },
{ start: 60, end: 100, refCount: 1, data: null },
]);
});
});
|