@teselagen/range-utils 0.3.7 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -0
- package/flipContainedRange.d.ts +1 -1
- package/index.js +233 -85
- package/index.mjs +233 -85
- package/index.umd.js +233 -85
- package/package.json +1 -2
- package/src/adjustRangeToDeletionOfAnotherRange.test.js +166 -105
- package/src/adjustRangeToInsert.js +29 -26
- package/src/adjustRangeToInsert.test.js +197 -109
- package/src/adjustRangeToRotation.js +4 -5
- package/src/adjustRangeToRotation.test.js +203 -119
- package/src/checkIfNonCircularRangesOverlap.js +18 -15
- package/src/checkIfNonCircularRangesOverlap.test.js +67 -42
- package/src/checkIfPotentiallyCircularRangesOverlap.js +22 -12
- package/src/checkIfPotentiallyCircularRangesOverlap.test.js +115 -70
- package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.js +72 -41
- package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.test.js +183 -84
- package/src/convertRangeIndices.js +24 -20
- package/src/convertRangeIndices.test.js +40 -21
- package/src/convertRangeTo0Based.js +7 -4
- package/src/convertRangeTo1Based.js +8 -4
- package/src/doesRangeSpanEntireSequence.js +4 -4
- package/src/doesRangeSpanOrigin.js +3 -3
- package/src/expandOrContractCircularRangeToPosition.js +45 -38
- package/src/expandOrContractNonCircularRangeToPosition.js +24 -21
- package/src/expandOrContractRangeByLength.js +16 -11
- package/src/expandOrContractRangeByLength.test.js +109 -71
- package/src/expandOrContractRangeToPosition.js +17 -9
- package/src/flipContainedRange.js +133 -72
- package/src/flipContainedRange.test.js +143 -117
- package/src/generateRandomRange.js +17 -15
- package/src/generateRandomRange.test.js +21 -21
- package/src/getAnnotationRangeType.js +25 -21
- package/src/getAnnotationRangeType.test.js +56 -57
- package/src/getEachPositionInRangeAsArray.js +13 -13
- package/src/getEachPositionInRangeAsArray.test.js +12 -8
- package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.js +16 -8
- package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.test.js +32 -24
- package/src/getMiddleOfRange.js +1 -1
- package/src/getMiddleOfRange.test.js +5 -13
- package/src/getOverlapOfNonCircularRanges.js +30 -30
- package/src/getOverlapsOfPotentiallyCircularRanges.js +5 -5
- package/src/getOverlapsOfPotentiallyCircularRanges.test.js +3 -23
- package/src/getPositionFromAngle.js +12 -7
- package/src/getRangeAngles.js +1 -1
- package/src/getRangeAngles.test.js +10 -11
- package/src/getRangeLength.test.js +5 -5
- package/src/getRangesBetweenTwoRanges.js +31 -22
- package/src/getSequenceWithinRange.js +13 -13
- package/src/getSequenceWithinRange.test.js +43 -45
- package/src/getShortestDistanceBetweenTwoPositions.js +10 -6
- package/src/getShortestDistanceBetweenTwoPositions.test.js +11 -13
- package/src/getYOffsetForPotentiallyCircularRange.js +33 -21
- package/src/getYOffsetsForPotentiallyCircularRanges.js +26 -19
- package/src/getYOffsetsForPotentiallyCircularRanges.test.js +42 -29
- package/src/getZeroedRangeOverlaps.js +30 -15
- package/src/getZeroedRangeOverlaps.test.js +75 -36
- package/src/index.js +51 -51
- package/src/index.test.js +6 -8
- package/src/invertRange.test.js +103 -93
- package/src/isPositionCloserToRangeStartThanRangeEnd.js +18 -6
- package/src/isPositionCloserToRangeStartThanRangeEnd.test.js +36 -16
- package/src/isPositionWithinRange.js +4 -4
- package/src/isRangeOrPositionWithinRange.js +18 -12
- package/src/isRangeOrPositionWithinRange.test.js +6 -6
- package/src/isRangeWithinRange.js +2 -3
- package/src/loopEachPositionInRange.js +3 -3
- package/src/modulatePositionByRange.js +8 -8
- package/src/modulatePositionByRange.test.js +10 -11
- package/src/modulateRangeBySequenceLength.js +7 -7
- package/src/modulateRangeBySequenceLength.test.js +39 -16
- package/src/normalizePositionByRangeLength.js +22 -18
- package/src/normalizePositionByRangeLength.test.js +23 -23
- package/src/normalizePositionByRangeLength1Based.js +7 -4
- package/src/normalizePositionByRangeLength1Based.test.js +9 -9
- package/src/normalizeRange.js +7 -7
- package/src/normalizeRange.test.js +9 -9
- package/src/provideInclusiveOptions.js +36 -23
- package/src/reversePositionInRange.js +16 -12
- package/src/splitRangeIntoTwoPartsIfItIsCircular.js +31 -28
- package/src/splitRangeIntoTwoPartsIfItIsCircular.test.js +22 -11
- package/src/translateRange.js +18 -8
- package/src/translateRange.test.js +18 -19
- package/src/trimNonCicularRangeByAnotherNonCircularRange.js +45 -42
- package/src/trimNumberToFitWithin0ToAnotherNumber.js +13 -10
- package/src/trimRangeByAnotherRange.js +20 -19
- package/src/trimRangeByAnotherRange.test.js +6 -6
- package/src/zeroSubrangeByContainerRange.js +29 -19
- package/src/zeroSubrangeByContainerRange.test.js +57 -47
@@ -1,73 +1,118 @@
|
|
1
|
-
import {expect} from
|
1
|
+
import { expect } from "chai";
|
2
2
|
|
3
|
-
import checkIfPotentiallyCircularRangesOverlap from
|
3
|
+
import checkIfPotentiallyCircularRangesOverlap from "./checkIfPotentiallyCircularRangesOverlap.js";
|
4
4
|
// checkIfPotentiallyCircularRangesOverlap(frame, sequence, minimumOrfSize, forward, circular)
|
5
|
-
describe(
|
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
|
-
|
5
|
+
describe("checkIfPotentiallyCircularRangesOverlap", function () {
|
6
|
+
it("returns true if ranges do overlap", function () {
|
7
|
+
expect(
|
8
|
+
checkIfPotentiallyCircularRangesOverlap(
|
9
|
+
{
|
10
|
+
start: 5,
|
11
|
+
end: 100
|
12
|
+
},
|
13
|
+
{
|
14
|
+
start: 50,
|
15
|
+
end: 50
|
16
|
+
}
|
17
|
+
)
|
18
|
+
).to.equal(true);
|
19
|
+
expect(
|
20
|
+
checkIfPotentiallyCircularRangesOverlap(
|
21
|
+
{
|
22
|
+
start: 5,
|
23
|
+
end: 100
|
24
|
+
},
|
25
|
+
{
|
26
|
+
start: 50,
|
27
|
+
end: 500
|
28
|
+
}
|
29
|
+
)
|
30
|
+
).to.equal(true);
|
31
|
+
expect(
|
32
|
+
checkIfPotentiallyCircularRangesOverlap(
|
33
|
+
{
|
34
|
+
start: 5,
|
35
|
+
end: 100
|
36
|
+
},
|
37
|
+
{
|
38
|
+
start: 0,
|
39
|
+
end: 5
|
40
|
+
}
|
41
|
+
)
|
42
|
+
).to.equal(true);
|
43
|
+
expect(
|
44
|
+
checkIfPotentiallyCircularRangesOverlap(
|
45
|
+
{
|
46
|
+
start: 50,
|
47
|
+
end: 10
|
48
|
+
},
|
49
|
+
{
|
50
|
+
start: 0,
|
51
|
+
end: 5
|
52
|
+
}
|
53
|
+
)
|
54
|
+
).to.equal(true);
|
55
|
+
expect(
|
56
|
+
checkIfPotentiallyCircularRangesOverlap(
|
57
|
+
{
|
58
|
+
start: 50,
|
59
|
+
end: 10
|
60
|
+
},
|
61
|
+
{
|
62
|
+
start: 20,
|
63
|
+
end: 5
|
64
|
+
}
|
65
|
+
)
|
66
|
+
).to.equal(true);
|
67
|
+
expect(
|
68
|
+
checkIfPotentiallyCircularRangesOverlap(
|
69
|
+
{
|
70
|
+
start: 50,
|
71
|
+
end: 10
|
72
|
+
},
|
73
|
+
{
|
74
|
+
start: 20,
|
75
|
+
end: 51
|
76
|
+
}
|
77
|
+
)
|
78
|
+
).to.equal(true);
|
79
|
+
});
|
80
|
+
it("returns false if ranges do not overlap", function () {
|
81
|
+
expect(
|
82
|
+
checkIfPotentiallyCircularRangesOverlap(
|
83
|
+
{
|
84
|
+
start: 5,
|
85
|
+
end: 100
|
86
|
+
},
|
87
|
+
{
|
88
|
+
start: 1,
|
89
|
+
end: 4
|
90
|
+
}
|
91
|
+
)
|
92
|
+
).to.equal(false);
|
93
|
+
expect(
|
94
|
+
checkIfPotentiallyCircularRangesOverlap(
|
95
|
+
{
|
96
|
+
start: 50,
|
97
|
+
end: 10
|
98
|
+
},
|
99
|
+
{
|
100
|
+
start: 20,
|
101
|
+
end: 49
|
102
|
+
}
|
103
|
+
)
|
104
|
+
).to.equal(false);
|
105
|
+
expect(
|
106
|
+
checkIfPotentiallyCircularRangesOverlap(
|
107
|
+
{
|
108
|
+
start: 5,
|
109
|
+
end: 100
|
110
|
+
},
|
111
|
+
{
|
112
|
+
start: 101,
|
113
|
+
end: 101
|
114
|
+
}
|
115
|
+
)
|
116
|
+
).to.equal(false);
|
117
|
+
});
|
73
118
|
});
|
@@ -1,47 +1,78 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
//this function is a little confusing, but basically it takes an array of overlaps
|
1
|
+
//this function is a little confusing, but basically it takes an array of overlaps
|
4
2
|
//generated from a range overlaps calculation, and it sews them together if possible
|
5
|
-
export default function collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
3
|
+
export default function collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
4
|
+
overlaps,
|
5
|
+
sequenceLength,
|
6
|
+
optionalOriginalRange
|
7
|
+
) {
|
8
|
+
const originalRangeLinear =
|
9
|
+
optionalOriginalRange &&
|
10
|
+
optionalOriginalRange.start <= optionalOriginalRange.end;
|
11
|
+
if (overlaps.length === 1 || overlaps.length === 0) {
|
12
|
+
return overlaps;
|
13
|
+
} else if (overlaps.length === 2) {
|
14
|
+
if (
|
15
|
+
overlaps[0].start === 0 &&
|
16
|
+
overlaps[1].end + 1 === sequenceLength &&
|
17
|
+
!originalRangeLinear
|
18
|
+
) {
|
19
|
+
return [
|
20
|
+
{
|
21
|
+
start: overlaps[1].start,
|
22
|
+
end: overlaps[0].end
|
23
|
+
}
|
24
|
+
];
|
25
|
+
} else if (
|
26
|
+
overlaps[1].start === 0 &&
|
27
|
+
overlaps[0].end + 1 === sequenceLength &&
|
28
|
+
!originalRangeLinear
|
29
|
+
) {
|
30
|
+
return [
|
31
|
+
{
|
32
|
+
start: overlaps[0].start,
|
33
|
+
end: overlaps[1].end
|
22
34
|
}
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
35
|
+
];
|
36
|
+
} else {
|
37
|
+
return overlaps;
|
38
|
+
}
|
39
|
+
} else if (overlaps.length === 3) {
|
40
|
+
const firstOverlap = overlaps[0];
|
41
|
+
const secondOverlap = overlaps[1];
|
42
|
+
const thirdOverlap = overlaps[2];
|
43
|
+
let collapsedOverlaps =
|
44
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
45
|
+
[firstOverlap, secondOverlap],
|
46
|
+
sequenceLength,
|
47
|
+
optionalOriginalRange
|
48
|
+
);
|
49
|
+
if (collapsedOverlaps.length === 1) {
|
50
|
+
collapsedOverlaps.push(thirdOverlap);
|
51
|
+
return collapsedOverlaps;
|
52
|
+
} else {
|
53
|
+
collapsedOverlaps =
|
54
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
55
|
+
[firstOverlap, thirdOverlap],
|
56
|
+
sequenceLength,
|
57
|
+
optionalOriginalRange
|
58
|
+
);
|
59
|
+
if (collapsedOverlaps.length === 1) {
|
60
|
+
collapsedOverlaps.push(secondOverlap);
|
61
|
+
return collapsedOverlaps;
|
62
|
+
} else {
|
63
|
+
collapsedOverlaps =
|
64
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
65
|
+
[secondOverlap, thirdOverlap],
|
66
|
+
sequenceLength,
|
67
|
+
optionalOriginalRange
|
68
|
+
);
|
28
69
|
if (collapsedOverlaps.length === 1) {
|
29
|
-
|
30
|
-
|
70
|
+
collapsedOverlaps.push(firstOverlap);
|
71
|
+
return collapsedOverlaps;
|
31
72
|
} else {
|
32
|
-
|
33
|
-
if (collapsedOverlaps.length === 1) {
|
34
|
-
collapsedOverlaps.push(secondOverlap);
|
35
|
-
return collapsedOverlaps;
|
36
|
-
} else {
|
37
|
-
collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([secondOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
|
38
|
-
if (collapsedOverlaps.length === 1) {
|
39
|
-
collapsedOverlaps.push(firstOverlap);
|
40
|
-
return collapsedOverlaps;
|
41
|
-
} else {
|
42
|
-
return overlaps;
|
43
|
-
}
|
44
|
-
}
|
73
|
+
return overlaps;
|
45
74
|
}
|
75
|
+
}
|
46
76
|
}
|
47
|
-
}
|
77
|
+
}
|
78
|
+
}
|
@@ -1,124 +1,223 @@
|
|
1
|
-
import getOverlapsOfPotentiallyCircularRanges from
|
1
|
+
import getOverlapsOfPotentiallyCircularRanges from "./getOverlapsOfPotentiallyCircularRanges.js";
|
2
2
|
|
3
|
-
import collapseOverlapsGeneratedFromRangeComparisonIfPossible from
|
4
|
-
import assert from
|
3
|
+
import collapseOverlapsGeneratedFromRangeComparisonIfPossible from "./collapseOverlapsGeneratedFromRangeComparisonIfPossible.js";
|
4
|
+
import assert from "assert";
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
describe("collapseOverlapsGeneratedFromRangeComparisonIfPossible", function () {
|
7
|
+
it("returns an empty array if passed an empty array of overlaps", function () {
|
8
|
+
assert.deepEqual(
|
9
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible([], 1000),
|
10
|
+
[]
|
11
|
+
);
|
12
|
+
assert.deepEqual(
|
13
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
14
|
+
getOverlapsOfPotentiallyCircularRanges(
|
15
|
+
{
|
15
16
|
start: 900,
|
16
17
|
end: 100
|
17
|
-
|
18
|
+
},
|
19
|
+
{
|
18
20
|
start: 900,
|
19
21
|
end: 100
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
},
|
23
|
+
1000
|
24
|
+
),
|
25
|
+
1000
|
26
|
+
),
|
27
|
+
[
|
28
|
+
{
|
29
|
+
start: 900,
|
30
|
+
end: 100
|
31
|
+
}
|
32
|
+
]
|
33
|
+
);
|
34
|
+
});
|
35
|
+
it("collapses a split circular range", function () {
|
36
|
+
assert.deepEqual(
|
37
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
38
|
+
[
|
39
|
+
{
|
24
40
|
start: 0,
|
25
41
|
end: 100
|
26
|
-
|
42
|
+
},
|
43
|
+
{
|
27
44
|
start: 105,
|
28
45
|
end: 999
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
46
|
+
}
|
47
|
+
],
|
48
|
+
1000
|
49
|
+
),
|
50
|
+
[
|
51
|
+
{
|
52
|
+
start: 105,
|
53
|
+
end: 100
|
54
|
+
}
|
55
|
+
]
|
56
|
+
);
|
57
|
+
assert.deepEqual(
|
58
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
59
|
+
getOverlapsOfPotentiallyCircularRanges(
|
60
|
+
{
|
37
61
|
start: 900,
|
38
62
|
end: 100
|
39
|
-
|
63
|
+
},
|
64
|
+
{
|
40
65
|
start: 900,
|
41
66
|
end: 100
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
67
|
+
},
|
68
|
+
1000
|
69
|
+
),
|
70
|
+
1000
|
71
|
+
),
|
72
|
+
[
|
73
|
+
{
|
74
|
+
start: 900,
|
75
|
+
end: 100
|
76
|
+
}
|
77
|
+
]
|
78
|
+
);
|
79
|
+
});
|
80
|
+
it("doesnt collapses a split range that could be circular if the originalRangeIsNotCircular", function () {
|
81
|
+
assert.deepEqual(
|
82
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
83
|
+
[
|
84
|
+
{
|
46
85
|
start: 0,
|
47
86
|
end: 100
|
48
|
-
|
87
|
+
},
|
88
|
+
{
|
49
89
|
start: 105,
|
50
90
|
end: 999
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
91
|
+
}
|
92
|
+
],
|
93
|
+
1000,
|
94
|
+
{
|
95
|
+
start: 0,
|
96
|
+
end: 999
|
97
|
+
}
|
98
|
+
),
|
99
|
+
[
|
100
|
+
{
|
101
|
+
start: 0,
|
102
|
+
end: 100
|
103
|
+
},
|
104
|
+
{
|
105
|
+
start: 105,
|
106
|
+
end: 999
|
107
|
+
}
|
108
|
+
]
|
109
|
+
);
|
110
|
+
assert.deepEqual(
|
111
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
112
|
+
getOverlapsOfPotentiallyCircularRanges(
|
113
|
+
{
|
62
114
|
start: 900,
|
63
115
|
end: 100
|
64
|
-
|
116
|
+
},
|
117
|
+
{
|
65
118
|
start: 900,
|
66
119
|
end: 100
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
120
|
+
},
|
121
|
+
1000
|
122
|
+
),
|
123
|
+
1000
|
124
|
+
),
|
125
|
+
[
|
126
|
+
{
|
127
|
+
start: 900,
|
128
|
+
end: 100
|
129
|
+
}
|
130
|
+
]
|
131
|
+
);
|
132
|
+
});
|
133
|
+
it("doesnt collapses a split range that doesnt line up correctly", function () {
|
134
|
+
assert.deepEqual(
|
135
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
136
|
+
[
|
137
|
+
{
|
74
138
|
start: 0,
|
75
139
|
end: 100
|
76
|
-
|
140
|
+
},
|
141
|
+
{
|
77
142
|
start: 105,
|
78
143
|
end: 998
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
144
|
+
}
|
145
|
+
],
|
146
|
+
1000
|
147
|
+
),
|
148
|
+
[
|
149
|
+
{
|
150
|
+
start: 0,
|
151
|
+
end: 100
|
152
|
+
},
|
153
|
+
{
|
154
|
+
start: 105,
|
155
|
+
end: 998
|
156
|
+
}
|
157
|
+
]
|
158
|
+
);
|
159
|
+
});
|
160
|
+
it("collapses a split circular range with a third part", function () {
|
161
|
+
assert.deepEqual(
|
162
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
163
|
+
[
|
164
|
+
{
|
89
165
|
start: 200,
|
90
166
|
end: 300
|
91
|
-
|
167
|
+
},
|
168
|
+
{
|
92
169
|
start: 0,
|
93
170
|
end: 100
|
94
|
-
|
171
|
+
},
|
172
|
+
{
|
95
173
|
start: 500,
|
96
174
|
end: 999
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
175
|
+
}
|
176
|
+
],
|
177
|
+
1000
|
178
|
+
),
|
179
|
+
[
|
180
|
+
{
|
181
|
+
start: 500,
|
182
|
+
end: 100
|
183
|
+
},
|
184
|
+
{
|
185
|
+
start: 200,
|
186
|
+
end: 300
|
187
|
+
}
|
188
|
+
]
|
189
|
+
);
|
190
|
+
});
|
105
191
|
|
106
|
-
|
107
|
-
|
192
|
+
it("collapses a split circular range with a third part in a different order", function () {
|
193
|
+
assert.deepEqual(
|
194
|
+
collapseOverlapsGeneratedFromRangeComparisonIfPossible(
|
195
|
+
[
|
196
|
+
{
|
108
197
|
start: 0,
|
109
198
|
end: 100
|
110
|
-
|
199
|
+
},
|
200
|
+
{
|
111
201
|
start: 200,
|
112
202
|
end: 300
|
113
|
-
|
203
|
+
},
|
204
|
+
{
|
114
205
|
start: 500,
|
115
206
|
end: 999
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
207
|
+
}
|
208
|
+
],
|
209
|
+
1000
|
210
|
+
),
|
211
|
+
[
|
212
|
+
{
|
213
|
+
start: 500,
|
214
|
+
end: 100
|
215
|
+
},
|
216
|
+
{
|
217
|
+
start: 200,
|
218
|
+
end: 300
|
219
|
+
}
|
220
|
+
]
|
221
|
+
);
|
222
|
+
});
|
124
223
|
});
|
@@ -1,22 +1,26 @@
|
|
1
|
-
import {assign} from "lodash";
|
1
|
+
import { assign } from "lodash";
|
2
2
|
|
3
3
|
export default function convertRangeIndices(range, inputType, outputType) {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
4
|
+
inputType = inputType || {};
|
5
|
+
outputType = outputType || {};
|
6
|
+
return assign({}, range, {
|
7
|
+
start:
|
8
|
+
Number(range.start) +
|
9
|
+
(inputType.inclusive1BasedStart
|
10
|
+
? outputType.inclusive1BasedStart
|
11
|
+
? 0
|
12
|
+
: -1
|
13
|
+
: outputType.inclusive1BasedStart
|
14
|
+
? 1
|
15
|
+
: 0),
|
16
|
+
end:
|
17
|
+
Number(range.end) +
|
18
|
+
(inputType.inclusive1BasedEnd
|
19
|
+
? outputType.inclusive1BasedEnd
|
20
|
+
? 0
|
21
|
+
: -1
|
22
|
+
: outputType.inclusive1BasedEnd
|
23
|
+
? 1
|
24
|
+
: 0)
|
25
|
+
});
|
26
|
+
}
|