Skip to content

Commit 2ef0ae1

Browse files
committed
release: chore, add a test case
1 parent 60960d2 commit 2ef0ae1

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

src/utils/normalize.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,18 @@ export function normalize(ranges: Range[]): Range[] {
55

66
const sorted = ranges
77
.map(range => [...range] as Range)
8-
.sort((a, b) => a[0] - b[0])
8+
.sort((prev, next) => prev[0] - next[0])
99

10-
const result: Range[] = [sorted[0]]
10+
return sorted.reduce((acc, current) => {
11+
const last = acc[acc.length - 1]
1112

12-
for (let i = 1; i < sorted.length; i++) {
13-
const current: Range = sorted[i]
14-
const last = result[result.length - 1]
15-
16-
if (current[0] <= last[1] + 1) {
13+
if (current[0] <= last[1] + 1)
1714
last[1] = Math.max(last[1], current[1])
18-
} else {
19-
result.push(current)
20-
}
21-
}
15+
else
16+
acc.push(current)
2217

23-
return result
18+
return acc
19+
}, [sorted.shift()!])
2420
}
2521

2622
if (import.meta.vitest) {

src/utils/split.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ import type { Range } from "../types"
22

33
import { normalize } from "./normalize"
44

5-
export function split(ranges: Range[], splitRange: Range): Range[] {
5+
export function split(ranges: Range[], range: Range): Range[] {
66
const result: Range[] = []
77

8-
ranges.forEach(([start, end]) => {
9-
if (end < splitRange[0] || start > splitRange[1]) {
8+
normalize(ranges).forEach(([start, end]) => {
9+
if (end < range[0] || start > range[1]) {
1010
result.push([start, end])
1111
} else {
12-
if (start < splitRange[0]) {
13-
result.push([start, splitRange[0] - 1])
12+
if (start < range[0]) {
13+
result.push([start, range[0] - 1])
1414
}
15-
if (end > splitRange[1]) {
16-
result.push([splitRange[1] + 1, end])
15+
if (end > range[1]) {
16+
result.push([range[1] + 1, end])
1717
}
1818
}
1919
})
2020

21-
return normalize(result)
21+
return result
2222
}
2323

2424
if (import.meta.vitest) {
@@ -41,8 +41,8 @@ if (import.meta.vitest) {
4141
})
4242

4343
it("should split multiple ranges", () => {
44-
expect(split([[1, 5], [7, 10]], [3, 8]))
45-
.toEqual([[1, 2], [9, 10]])
44+
expect(split([[1, 5], [7, 10]], [3, 8])).toEqual([[1, 2], [9, 10]])
45+
expect(split([[1, 5], [9, 16], [7, 10]], [3, 8])).toEqual([[1, 2], [9, 16]])
4646
})
4747

4848
it("should handle edge cases", () => {

0 commit comments

Comments
 (0)