@teselagen/range-utils 0.3.7 → 0.3.9

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.
Files changed (96) hide show
  1. package/README.md +94 -0
  2. package/flipContainedRange.d.ts +1 -1
  3. package/index.cjs +2619 -0
  4. package/index.d.ts +52 -51
  5. package/index.js +1791 -6100
  6. package/index.umd.cjs +2623 -0
  7. package/package.json +2 -3
  8. package/src/adjustRangeToDeletionOfAnotherRange.test.js +166 -105
  9. package/src/adjustRangeToInsert.js +29 -26
  10. package/src/adjustRangeToInsert.test.js +197 -109
  11. package/src/adjustRangeToRotation.js +4 -5
  12. package/src/adjustRangeToRotation.test.js +203 -119
  13. package/src/checkIfNonCircularRangesOverlap.js +18 -15
  14. package/src/checkIfNonCircularRangesOverlap.test.js +67 -42
  15. package/src/checkIfPotentiallyCircularRangesOverlap.js +22 -12
  16. package/src/checkIfPotentiallyCircularRangesOverlap.test.js +115 -70
  17. package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.js +72 -41
  18. package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.test.js +183 -84
  19. package/src/convertRangeIndices.js +24 -20
  20. package/src/convertRangeIndices.test.js +40 -21
  21. package/src/convertRangeTo0Based.js +7 -4
  22. package/src/convertRangeTo1Based.js +8 -4
  23. package/src/doesRangeSpanEntireSequence.js +4 -4
  24. package/src/doesRangeSpanOrigin.js +3 -3
  25. package/src/expandOrContractCircularRangeToPosition.js +45 -38
  26. package/src/expandOrContractNonCircularRangeToPosition.js +24 -21
  27. package/src/expandOrContractRangeByLength.js +16 -11
  28. package/src/expandOrContractRangeByLength.test.js +109 -71
  29. package/src/expandOrContractRangeToPosition.js +17 -9
  30. package/src/flipContainedRange.js +133 -72
  31. package/src/flipContainedRange.test.js +143 -117
  32. package/src/generateRandomRange.js +17 -15
  33. package/src/generateRandomRange.test.js +21 -21
  34. package/src/getAnnotationRangeType.js +25 -21
  35. package/src/getAnnotationRangeType.test.js +56 -57
  36. package/src/getEachPositionInRangeAsArray.js +13 -13
  37. package/src/getEachPositionInRangeAsArray.test.js +12 -8
  38. package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.js +16 -8
  39. package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.test.js +32 -24
  40. package/src/getMiddleOfRange.js +1 -1
  41. package/src/getMiddleOfRange.test.js +5 -13
  42. package/src/getOverlapOfNonCircularRanges.js +30 -30
  43. package/src/getOverlapsOfPotentiallyCircularRanges.js +5 -5
  44. package/src/getOverlapsOfPotentiallyCircularRanges.test.js +3 -23
  45. package/src/getPositionFromAngle.js +12 -7
  46. package/src/getRangeAngles.js +1 -1
  47. package/src/getRangeAngles.test.js +10 -11
  48. package/src/getRangeLength.test.js +5 -5
  49. package/src/getRangesBetweenTwoRanges.js +31 -22
  50. package/src/getSequenceWithinRange.js +13 -13
  51. package/src/getSequenceWithinRange.test.js +43 -45
  52. package/src/getShortestDistanceBetweenTwoPositions.js +10 -6
  53. package/src/getShortestDistanceBetweenTwoPositions.test.js +11 -13
  54. package/src/getYOffsetForPotentiallyCircularRange.js +33 -21
  55. package/src/getYOffsetsForPotentiallyCircularRanges.js +26 -19
  56. package/src/getYOffsetsForPotentiallyCircularRanges.test.js +42 -29
  57. package/src/getZeroedRangeOverlaps.js +30 -15
  58. package/src/getZeroedRangeOverlaps.test.js +75 -36
  59. package/src/index.js +52 -51
  60. package/src/index.test.js +6 -8
  61. package/src/invertRange.test.js +103 -93
  62. package/src/isPositionCloserToRangeStartThanRangeEnd.js +18 -6
  63. package/src/isPositionCloserToRangeStartThanRangeEnd.test.js +36 -16
  64. package/src/isPositionWithinRange.js +4 -4
  65. package/src/isRangeOrPositionWithinRange.js +18 -12
  66. package/src/isRangeOrPositionWithinRange.test.js +6 -6
  67. package/src/isRangeWithinRange.js +2 -3
  68. package/src/loopEachPositionInRange.js +3 -3
  69. package/src/modulatePositionByRange.js +8 -8
  70. package/src/modulatePositionByRange.test.js +10 -11
  71. package/src/modulateRangeBySequenceLength.js +7 -7
  72. package/src/modulateRangeBySequenceLength.test.js +39 -16
  73. package/src/normalizePositionByRangeLength.js +22 -18
  74. package/src/normalizePositionByRangeLength.test.js +23 -23
  75. package/src/normalizePositionByRangeLength1Based.js +7 -4
  76. package/src/normalizePositionByRangeLength1Based.test.js +9 -9
  77. package/src/normalizeRange.js +7 -7
  78. package/src/normalizeRange.test.js +9 -9
  79. package/src/provideInclusiveOptions.js +36 -23
  80. package/src/reversePositionInRange.js +16 -12
  81. package/src/splitRangeIntoTwoPartsIfItIsCircular.js +31 -28
  82. package/src/splitRangeIntoTwoPartsIfItIsCircular.test.js +22 -11
  83. package/src/translateRange.js +18 -8
  84. package/src/translateRange.test.js +18 -19
  85. package/src/trimAnnStartEndToFitSeqLength.js +9 -0
  86. package/src/trimAnnStartEndToFitSeqLength.test.js +35 -0
  87. package/src/trimNonCicularRangeByAnotherNonCircularRange.js +45 -42
  88. package/src/trimNumberToFitWithin0ToAnotherNumber.js +13 -10
  89. package/src/trimRangeByAnotherRange.js +20 -19
  90. package/src/trimRangeByAnotherRange.test.js +6 -6
  91. package/src/zeroSubrangeByContainerRange.js +29 -19
  92. package/src/zeroSubrangeByContainerRange.test.js +57 -47
  93. package/trimAnnStartEndToFitSeqLength.d.ts +1 -0
  94. package/trimAnnStartEndToFitSeqLength.test.d.ts +1 -0
  95. package/index.mjs +0 -6928
  96. package/index.umd.js +0 -6932
@@ -1,73 +1,118 @@
1
- import {expect} from 'chai';
1
+ import { expect } from "chai";
2
2
 
3
- import checkIfPotentiallyCircularRangesOverlap from './checkIfPotentiallyCircularRangesOverlap.js';
3
+ import checkIfPotentiallyCircularRangesOverlap from "./checkIfPotentiallyCircularRangesOverlap.js";
4
4
  // checkIfPotentiallyCircularRangesOverlap(frame, sequence, minimumOrfSize, forward, circular)
5
- describe('checkIfPotentiallyCircularRangesOverlap', function() {
6
- it('returns true if ranges do overlap', function() {
7
- expect(checkIfPotentiallyCircularRangesOverlap({
8
- start: 5,
9
- end: 100
10
- }, {
11
- start: 50,
12
- end: 50
13
- })).to.equal(true);
14
- expect(checkIfPotentiallyCircularRangesOverlap({
15
- start: 5,
16
- end: 100
17
- }, {
18
- start: 50,
19
- end: 500
20
- })).to.equal(true);
21
- expect(checkIfPotentiallyCircularRangesOverlap({
22
- start: 5,
23
- end: 100
24
- }, {
25
- start: 0,
26
- end: 5
27
- })).to.equal(true);
28
- expect(checkIfPotentiallyCircularRangesOverlap({
29
- start: 50,
30
- end: 10
31
- }, {
32
- start: 0,
33
- end: 5
34
- })).to.equal(true);
35
- expect(checkIfPotentiallyCircularRangesOverlap({
36
- start: 50,
37
- end: 10
38
- }, {
39
- start: 20,
40
- end: 5
41
- })).to.equal(true);
42
- expect(checkIfPotentiallyCircularRangesOverlap({
43
- start: 50,
44
- end: 10
45
- }, {
46
- start: 20,
47
- end: 51
48
- })).to.equal(true);
49
- });
50
- it('returns false if ranges do not overlap', function() {
51
- expect(checkIfPotentiallyCircularRangesOverlap({
52
- start: 5,
53
- end: 100
54
- }, {
55
- start: 1,
56
- end: 4
57
- })).to.equal(false);
58
- expect(checkIfPotentiallyCircularRangesOverlap({
59
- start: 50,
60
- end: 10
61
- }, {
62
- start: 20,
63
- end: 49
64
- })).to.equal(false);
65
- expect(checkIfPotentiallyCircularRangesOverlap({
66
- start: 5,
67
- end: 100
68
- }, {
69
- start: 101,
70
- end: 101
71
- })).to.equal(false);
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(overlaps, sequenceLength, optionalOriginalRange) {
6
- const originalRangeLinear = optionalOriginalRange && (optionalOriginalRange.start <= optionalOriginalRange.end)
7
- if (overlaps.length === 1 || overlaps.length === 0) {
8
- return overlaps;
9
- } else if (overlaps.length === 2) {
10
- if (overlaps[0].start === 0 && overlaps[1].end + 1 === sequenceLength && !originalRangeLinear) {
11
- return [{
12
- start: overlaps[1].start,
13
- end: overlaps[0].end
14
- }];
15
- } else if (overlaps[1].start === 0 && overlaps[0].end + 1 === sequenceLength && !originalRangeLinear) {
16
- return [{
17
- start: overlaps[0].start,
18
- end: overlaps[1].end
19
- }];
20
- } else {
21
- return overlaps;
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
- } else if (overlaps.length === 3) {
24
- const firstOverlap = overlaps[0];
25
- const secondOverlap = overlaps[1];
26
- const thirdOverlap = overlaps[2];
27
- let collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, secondOverlap], sequenceLength, optionalOriginalRange);
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
- collapsedOverlaps.push(thirdOverlap);
30
- return collapsedOverlaps;
70
+ collapsedOverlaps.push(firstOverlap);
71
+ return collapsedOverlaps;
31
72
  } else {
32
- collapsedOverlaps = collapseOverlapsGeneratedFromRangeComparisonIfPossible([firstOverlap, thirdOverlap], sequenceLength, optionalOriginalRange);
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 './getOverlapsOfPotentiallyCircularRanges.js';
1
+ import getOverlapsOfPotentiallyCircularRanges from "./getOverlapsOfPotentiallyCircularRanges.js";
2
2
 
3
- import collapseOverlapsGeneratedFromRangeComparisonIfPossible from './collapseOverlapsGeneratedFromRangeComparisonIfPossible.js';
4
- import assert from 'assert';
3
+ import collapseOverlapsGeneratedFromRangeComparisonIfPossible from "./collapseOverlapsGeneratedFromRangeComparisonIfPossible.js";
4
+ import assert from "assert";
5
5
 
6
-
7
- ;
8
- describe('collapseOverlapsGeneratedFromRangeComparisonIfPossible', function() {
9
- it('returns an empty array if passed an empty array of overlaps', function() {
10
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([], 1000), []);
11
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges({
12
- start: 900,
13
- end: 100
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
- }, 1000), 1000), [{
18
+ },
19
+ {
18
20
  start: 900,
19
21
  end: 100
20
- }]);
21
- });
22
- it('collapses a split circular range', function() {
23
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([{
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
- }], 1000), [{
30
- start: 105,
31
- end: 100
32
- }]);
33
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges({
34
- start: 900,
35
- end: 100
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
- }, 1000), 1000), [{
63
+ },
64
+ {
40
65
  start: 900,
41
66
  end: 100
42
- }]);
43
- });
44
- it('doesnt collapses a split range that could be circular if the originalRangeIsNotCircular', function() {
45
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([{
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
- }], 1000, {
52
- start: 0,
53
- end: 999
54
- }), [{
55
- start: 0,
56
- end: 100
57
- }, {
58
- start: 105,
59
- end: 999
60
- }]);
61
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible(getOverlapsOfPotentiallyCircularRanges({
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
- }, 1000), 1000), [{
68
- start: 900,
69
- end: 100
70
- }]);
71
- });
72
- it('doesnt collapses a split range that doesnt line up correctly', function() {
73
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([{
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
- }], 1000),[{
80
- start: 0,
81
- end: 100
82
- }, {
83
- start: 105,
84
- end: 998
85
- }]);
86
- });
87
- it('collapses a split circular range with a third part', function() {
88
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([{
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
- }], 1000), [{
98
- start: 500,
99
- end: 100
100
- },{
101
- start: 200,
102
- end: 300
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
- it('collapses a split circular range with a third part in a different order', function() {
107
- assert.deepEqual(collapseOverlapsGeneratedFromRangeComparisonIfPossible([{
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
- }], 1000), [{
117
- start: 500,
118
- end: 100
119
- },{
120
- start: 200,
121
- end: 300
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-es";
2
2
 
3
3
  export default function convertRangeIndices(range, inputType, outputType) {
4
- inputType = inputType || {}
5
- outputType = outputType || {}
6
- return assign({},range,{
7
- start: Number(range.start) + (inputType.inclusive1BasedStart
8
- ? outputType.inclusive1BasedStart
9
- ? 0
10
- : -1
11
- : outputType.inclusive1BasedStart
12
- ? 1
13
- : 0),
14
- end: Number(range.end) + (inputType.inclusive1BasedEnd
15
- ? outputType.inclusive1BasedEnd
16
- ? 0
17
- : -1
18
- : outputType.inclusive1BasedEnd
19
- ? 1
20
- : 0)
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
+ }