@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.
Files changed (89) hide show
  1. package/README.md +94 -0
  2. package/flipContainedRange.d.ts +1 -1
  3. package/index.js +233 -85
  4. package/index.mjs +233 -85
  5. package/index.umd.js +233 -85
  6. package/package.json +1 -2
  7. package/src/adjustRangeToDeletionOfAnotherRange.test.js +166 -105
  8. package/src/adjustRangeToInsert.js +29 -26
  9. package/src/adjustRangeToInsert.test.js +197 -109
  10. package/src/adjustRangeToRotation.js +4 -5
  11. package/src/adjustRangeToRotation.test.js +203 -119
  12. package/src/checkIfNonCircularRangesOverlap.js +18 -15
  13. package/src/checkIfNonCircularRangesOverlap.test.js +67 -42
  14. package/src/checkIfPotentiallyCircularRangesOverlap.js +22 -12
  15. package/src/checkIfPotentiallyCircularRangesOverlap.test.js +115 -70
  16. package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.js +72 -41
  17. package/src/collapseOverlapsGeneratedFromRangeComparisonIfPossible.test.js +183 -84
  18. package/src/convertRangeIndices.js +24 -20
  19. package/src/convertRangeIndices.test.js +40 -21
  20. package/src/convertRangeTo0Based.js +7 -4
  21. package/src/convertRangeTo1Based.js +8 -4
  22. package/src/doesRangeSpanEntireSequence.js +4 -4
  23. package/src/doesRangeSpanOrigin.js +3 -3
  24. package/src/expandOrContractCircularRangeToPosition.js +45 -38
  25. package/src/expandOrContractNonCircularRangeToPosition.js +24 -21
  26. package/src/expandOrContractRangeByLength.js +16 -11
  27. package/src/expandOrContractRangeByLength.test.js +109 -71
  28. package/src/expandOrContractRangeToPosition.js +17 -9
  29. package/src/flipContainedRange.js +133 -72
  30. package/src/flipContainedRange.test.js +143 -117
  31. package/src/generateRandomRange.js +17 -15
  32. package/src/generateRandomRange.test.js +21 -21
  33. package/src/getAnnotationRangeType.js +25 -21
  34. package/src/getAnnotationRangeType.test.js +56 -57
  35. package/src/getEachPositionInRangeAsArray.js +13 -13
  36. package/src/getEachPositionInRangeAsArray.test.js +12 -8
  37. package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.js +16 -8
  38. package/src/getLengthOfOverlappingRegionsBetweenTwoRanges.test.js +32 -24
  39. package/src/getMiddleOfRange.js +1 -1
  40. package/src/getMiddleOfRange.test.js +5 -13
  41. package/src/getOverlapOfNonCircularRanges.js +30 -30
  42. package/src/getOverlapsOfPotentiallyCircularRanges.js +5 -5
  43. package/src/getOverlapsOfPotentiallyCircularRanges.test.js +3 -23
  44. package/src/getPositionFromAngle.js +12 -7
  45. package/src/getRangeAngles.js +1 -1
  46. package/src/getRangeAngles.test.js +10 -11
  47. package/src/getRangeLength.test.js +5 -5
  48. package/src/getRangesBetweenTwoRanges.js +31 -22
  49. package/src/getSequenceWithinRange.js +13 -13
  50. package/src/getSequenceWithinRange.test.js +43 -45
  51. package/src/getShortestDistanceBetweenTwoPositions.js +10 -6
  52. package/src/getShortestDistanceBetweenTwoPositions.test.js +11 -13
  53. package/src/getYOffsetForPotentiallyCircularRange.js +33 -21
  54. package/src/getYOffsetsForPotentiallyCircularRanges.js +26 -19
  55. package/src/getYOffsetsForPotentiallyCircularRanges.test.js +42 -29
  56. package/src/getZeroedRangeOverlaps.js +30 -15
  57. package/src/getZeroedRangeOverlaps.test.js +75 -36
  58. package/src/index.js +51 -51
  59. package/src/index.test.js +6 -8
  60. package/src/invertRange.test.js +103 -93
  61. package/src/isPositionCloserToRangeStartThanRangeEnd.js +18 -6
  62. package/src/isPositionCloserToRangeStartThanRangeEnd.test.js +36 -16
  63. package/src/isPositionWithinRange.js +4 -4
  64. package/src/isRangeOrPositionWithinRange.js +18 -12
  65. package/src/isRangeOrPositionWithinRange.test.js +6 -6
  66. package/src/isRangeWithinRange.js +2 -3
  67. package/src/loopEachPositionInRange.js +3 -3
  68. package/src/modulatePositionByRange.js +8 -8
  69. package/src/modulatePositionByRange.test.js +10 -11
  70. package/src/modulateRangeBySequenceLength.js +7 -7
  71. package/src/modulateRangeBySequenceLength.test.js +39 -16
  72. package/src/normalizePositionByRangeLength.js +22 -18
  73. package/src/normalizePositionByRangeLength.test.js +23 -23
  74. package/src/normalizePositionByRangeLength1Based.js +7 -4
  75. package/src/normalizePositionByRangeLength1Based.test.js +9 -9
  76. package/src/normalizeRange.js +7 -7
  77. package/src/normalizeRange.test.js +9 -9
  78. package/src/provideInclusiveOptions.js +36 -23
  79. package/src/reversePositionInRange.js +16 -12
  80. package/src/splitRangeIntoTwoPartsIfItIsCircular.js +31 -28
  81. package/src/splitRangeIntoTwoPartsIfItIsCircular.test.js +22 -11
  82. package/src/translateRange.js +18 -8
  83. package/src/translateRange.test.js +18 -19
  84. package/src/trimNonCicularRangeByAnotherNonCircularRange.js +45 -42
  85. package/src/trimNumberToFitWithin0ToAnotherNumber.js +13 -10
  86. package/src/trimRangeByAnotherRange.js +20 -19
  87. package/src/trimRangeByAnotherRange.test.js +6 -6
  88. package/src/zeroSubrangeByContainerRange.js +29 -19
  89. package/src/zeroSubrangeByContainerRange.test.js +57 -47
@@ -1,85 +1,146 @@
1
- import expandOrContractRangeByLength from './expandOrContractRangeByLength';
2
- import isRangeWithinRange from './isRangeWithinRange';
3
- import getOverlapsOfPotentiallyCircularRanges from './getOverlapsOfPotentiallyCircularRanges';
4
- import translateRange from './translateRange';
5
- import getRangeLength from './getRangeLength';
1
+ import expandOrContractRangeByLength from "./expandOrContractRangeByLength";
2
+ import isRangeWithinRange from "./isRangeWithinRange";
3
+ import getOverlapsOfPotentiallyCircularRanges from "./getOverlapsOfPotentiallyCircularRanges";
4
+ import translateRange from "./translateRange";
5
+ import getRangeLength from "./getRangeLength";
6
6
 
7
- export default function flipRelativeRange(innerRange, outerRange, sequenceLength, options) {
8
- const isFullyContained = isRangeWithinRange(innerRange,outerRange,sequenceLength);
9
- if (isFullyContained) {
10
- return flipFullyContainedRange(innerRange,outerRange,sequenceLength)
11
- }
12
- else {
13
- // flip not fully contained range
14
- return flipNonFullyContainedRange(innerRange,outerRange,sequenceLength)
15
- }
16
- };
7
+ export default function flipRelativeRange(
8
+ innerRange,
9
+ outerRange,
10
+ sequenceLength
11
+ ) {
12
+ const isFullyContained = isRangeWithinRange(
13
+ innerRange,
14
+ outerRange,
15
+ sequenceLength
16
+ );
17
+ if (isFullyContained) {
18
+ return flipFullyContainedRange(innerRange, outerRange, sequenceLength);
19
+ } else {
20
+ // flip not fully contained range
21
+ return flipNonFullyContainedRange(innerRange, outerRange, sequenceLength);
22
+ }
23
+ }
17
24
 
18
- function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
19
- const outerFullyContained = isRangeWithinRange(outerRange, innerRange,sequenceLength);
20
- let flippedInnerRange;
21
- if (outerFullyContained) {
22
- //special logic
23
- // flipFullyContainedRange(outerRange, outerRange, sequenceLength)
24
- const expandBy1 = getRangeLength({
25
- start: innerRange.start,
26
- end: outerRange.start
27
- },sequenceLength) - 1;
28
- flippedInnerRange = expandOrContractRangeByLength(outerRange, expandBy1, false, sequenceLength)
25
+ function flipNonFullyContainedRange(innerRange, outerRange, sequenceLength) {
26
+ const outerFullyContained = isRangeWithinRange(
27
+ outerRange,
28
+ innerRange,
29
+ sequenceLength
30
+ );
31
+ let flippedInnerRange;
32
+ if (outerFullyContained) {
33
+ //special logic
34
+ // flipFullyContainedRange(outerRange, outerRange, sequenceLength)
35
+ const expandBy1 =
36
+ getRangeLength(
37
+ {
38
+ start: innerRange.start,
39
+ end: outerRange.start
40
+ },
41
+ sequenceLength
42
+ ) - 1;
43
+ flippedInnerRange = expandOrContractRangeByLength(
44
+ outerRange,
45
+ expandBy1,
46
+ false,
47
+ sequenceLength
48
+ );
29
49
 
30
- const expandBy2 = getRangeLength({
31
- end: innerRange.end,
32
- start: outerRange.end
33
- },sequenceLength) - 1;
34
- flippedInnerRange = expandOrContractRangeByLength(flippedInnerRange, expandBy2, true, sequenceLength)
35
- } else {
36
- //find overlaps of ranges
37
- const overlaps = getOverlapsOfPotentiallyCircularRanges(innerRange, outerRange, sequenceLength);
38
- //take first overlap and determine which end of outer range it overlaps
39
- if (overlaps.length >= 1) {
40
- let overlapExtendsForward;
41
- const firstOverlap = overlaps[0];
42
- overlapExtendsForward = firstOverlap.start !== outerRange.start
43
- //flip using fully contained logic
44
- const flippedTruncatedInner = flipFullyContainedRange(firstOverlap, outerRange, sequenceLength);
45
- //extend in the opposite direction
46
- const lengthToExtend = getRangeLength(innerRange,sequenceLength) - getRangeLength(flippedTruncatedInner, sequenceLength);
47
- flippedInnerRange = expandOrContractRangeByLength(flippedTruncatedInner, lengthToExtend, overlapExtendsForward, sequenceLength)
48
- } else {
49
- throw new Error('This case (relative ranges that do not overlap) is unsupported! ')
50
- }
51
- }
52
- return flippedInnerRange
50
+ const expandBy2 =
51
+ getRangeLength(
52
+ {
53
+ end: innerRange.end,
54
+ start: outerRange.end
55
+ },
56
+ sequenceLength
57
+ ) - 1;
58
+ flippedInnerRange = expandOrContractRangeByLength(
59
+ flippedInnerRange,
60
+ expandBy2,
61
+ true,
62
+ sequenceLength
63
+ );
64
+ } else {
65
+ //find overlaps of ranges
66
+ const overlaps = getOverlapsOfPotentiallyCircularRanges(
67
+ innerRange,
68
+ outerRange,
69
+ sequenceLength
70
+ );
71
+ //take first overlap and determine which end of outer range it overlaps
72
+ if (overlaps.length >= 1) {
73
+ const firstOverlap = overlaps[0];
74
+ const overlapExtendsForward = firstOverlap.start !== outerRange.start;
75
+ //flip using fully contained logic
76
+ const flippedTruncatedInner = flipFullyContainedRange(
77
+ firstOverlap,
78
+ outerRange,
79
+ sequenceLength
80
+ );
81
+ //extend in the opposite direction
82
+ const lengthToExtend =
83
+ getRangeLength(innerRange, sequenceLength) -
84
+ getRangeLength(flippedTruncatedInner, sequenceLength);
85
+ flippedInnerRange = expandOrContractRangeByLength(
86
+ flippedTruncatedInner,
87
+ lengthToExtend,
88
+ overlapExtendsForward,
89
+ sequenceLength
90
+ );
91
+ } else {
92
+ throw new Error(
93
+ "This case (relative ranges that do not overlap) is unsupported! "
94
+ );
95
+ }
96
+ }
97
+ return flippedInnerRange;
53
98
  }
54
99
 
55
- function flipFullyContainedRange(innerRange, outerRange, sequenceLength, options) {
56
- //translate both ranges by offset such that outer range start = 0
57
- const translateBy = -outerRange.start;
58
- const translatedOuterRange = translateRange(outerRange, translateBy, sequenceLength);
59
- const translatedInnerRange = translateRange(innerRange, translateBy, sequenceLength);
100
+ function flipFullyContainedRange(innerRange, outerRange, sequenceLength) {
101
+ //translate both ranges by offset such that outer range start = 0
102
+ const translateBy = -outerRange.start;
103
+ const translatedOuterRange = translateRange(
104
+ outerRange,
105
+ translateBy,
106
+ sequenceLength
107
+ );
108
+ const translatedInnerRange = translateRange(
109
+ innerRange,
110
+ translateBy,
111
+ sequenceLength
112
+ );
60
113
 
61
- //flip like non origin spanning range
62
- const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(translatedInnerRange, translatedOuterRange, sequenceLength);
114
+ //flip like non origin spanning range
115
+ const translatedFlippedInnerRange = flipNonOriginSpanningContainedRange(
116
+ translatedInnerRange,
117
+ translatedOuterRange,
118
+ sequenceLength
119
+ );
63
120
 
64
- //translate inner range back by negative offset
65
- const flippedInnerRange = translateRange(translatedFlippedInnerRange, -translateBy, sequenceLength);
66
- return flippedInnerRange
121
+ //translate inner range back by negative offset
122
+ const flippedInnerRange = translateRange(
123
+ translatedFlippedInnerRange,
124
+ -translateBy,
125
+ sequenceLength
126
+ );
127
+ return flippedInnerRange;
67
128
  }
68
129
 
69
- function flipNonOriginSpanningContainedRange(innerRange, outerRange, sequenceLength) {
70
- //non origin spanning, fully contained inner
71
- const offsetFromStart = innerRange.start - outerRange.start;
72
- const newInnerEnd = outerRange.end - offsetFromStart;
73
- const innerRangeLength = getRangeLength(innerRange, sequenceLength);
130
+ function flipNonOriginSpanningContainedRange(
131
+ innerRange,
132
+ outerRange,
133
+ sequenceLength
134
+ ) {
135
+ //non origin spanning, fully contained inner
136
+ const offsetFromStart = innerRange.start - outerRange.start;
137
+ const newInnerEnd = outerRange.end - offsetFromStart;
138
+ const innerRangeLength = getRangeLength(innerRange, sequenceLength);
74
139
 
75
- return {
76
- end: newInnerEnd,
77
- start: newInnerEnd - (innerRangeLength -1)
78
- }
140
+ return {
141
+ end: newInnerEnd,
142
+ start: newInnerEnd - (innerRangeLength - 1)
143
+ };
79
144
  }
80
145
 
81
-
82
-
83
-
84
146
  //take 2
85
-
@@ -1,124 +1,150 @@
1
1
  /* eslint-disable no-var*/
2
- import flipContainedRange from './flipContainedRange';
2
+ import flipContainedRange from "./flipContainedRange";
3
3
 
4
- import chai from 'chai';
4
+ import chai from "chai";
5
5
  chai.should();
6
6
 
7
- describe('flipContainedRange', function () {
8
- it('non origin spanning, fully contained inner', function () {
9
- const innerRange ={
10
- start: 5,
11
- end: 13
12
- };
13
- const outerRange = {
14
- start: 0,
15
- end:20
16
- };
17
- const sequenceLength = 40;
18
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
19
- flippedInnerRange.should.deep.equal({
20
- start: 7,
21
- end:15
22
- })
23
- });
24
- it('non origin spanning outer, origin spanning fully contained inner', function () {
25
- const innerRange ={
26
- start: 3,
27
- end: 1
28
- };
29
- const outerRange = {
30
- start: 0,
31
- end:3
32
- };
33
- const sequenceLength = 4;
34
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
35
- flippedInnerRange.should.deep.equal({
36
- start: 2,
37
- end:0
38
- })
39
- });
40
- it('origin spanning outer, non-origin spanning, fully contained inner', function () {
41
- const innerRange ={
42
- start: 1,
43
- end: 3
44
- };
45
- const outerRange = {
46
- start: 8,
47
- end:5
48
- };
49
- const sequenceLength = 10;
50
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
51
- flippedInnerRange.should.deep.equal({
52
- start: 0,
53
- end:2
54
- })
55
- });
56
- it('non-origin spanning outer, non-origin spanning, non-fully contained inner', function () {
57
- const innerRange ={
58
- start: 1,
59
- end: 4
60
- };
61
- const outerRange = {
62
- start: 3,
63
- end:6
64
- };
65
- const sequenceLength = 10;
66
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
67
- flippedInnerRange.should.deep.equal({
68
- start: 5,
69
- end:8
70
- })
71
- });
72
- it('non-origin spanning outer, non-origin spanning, non-fully contained inner', function () {
73
- const innerRange ={
74
- start: 4,
75
- end: 2
76
- };
77
- const outerRange = {
78
- start: 2,
79
- end:5
80
- };
81
- const sequenceLength = 10;
82
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
83
- flippedInnerRange.should.deep.equal({
84
- start: 5,
85
- end:3
86
- })
87
- });
7
+ describe("flipContainedRange", function () {
8
+ it("non origin spanning, fully contained inner", function () {
9
+ const innerRange = {
10
+ start: 5,
11
+ end: 13
12
+ };
13
+ const outerRange = {
14
+ start: 0,
15
+ end: 20
16
+ };
17
+ const sequenceLength = 40;
18
+ const flippedInnerRange = flipContainedRange(
19
+ innerRange,
20
+ outerRange,
21
+ sequenceLength
22
+ );
23
+ flippedInnerRange.should.deep.equal({
24
+ start: 7,
25
+ end: 15
26
+ });
27
+ });
28
+ it("non origin spanning outer, origin spanning fully contained inner", function () {
29
+ const innerRange = {
30
+ start: 3,
31
+ end: 1
32
+ };
33
+ const outerRange = {
34
+ start: 0,
35
+ end: 3
36
+ };
37
+ const sequenceLength = 4;
38
+ const flippedInnerRange = flipContainedRange(
39
+ innerRange,
40
+ outerRange,
41
+ sequenceLength
42
+ );
43
+ flippedInnerRange.should.deep.equal({
44
+ start: 2,
45
+ end: 0
46
+ });
47
+ });
48
+ it("origin spanning outer, non-origin spanning, fully contained inner", function () {
49
+ const innerRange = {
50
+ start: 1,
51
+ end: 3
52
+ };
53
+ const outerRange = {
54
+ start: 8,
55
+ end: 5
56
+ };
57
+ const sequenceLength = 10;
58
+ const flippedInnerRange = flipContainedRange(
59
+ innerRange,
60
+ outerRange,
61
+ sequenceLength
62
+ );
63
+ flippedInnerRange.should.deep.equal({
64
+ start: 0,
65
+ end: 2
66
+ });
67
+ });
68
+ it("non-origin spanning outer, non-origin spanning, non-fully contained inner", function () {
69
+ const innerRange = {
70
+ start: 1,
71
+ end: 4
72
+ };
73
+ const outerRange = {
74
+ start: 3,
75
+ end: 6
76
+ };
77
+ const sequenceLength = 10;
78
+ const flippedInnerRange = flipContainedRange(
79
+ innerRange,
80
+ outerRange,
81
+ sequenceLength
82
+ );
83
+ flippedInnerRange.should.deep.equal({
84
+ start: 5,
85
+ end: 8
86
+ });
87
+ });
88
+ it("non-origin spanning outer, non-origin spanning, non-fully contained inner", function () {
89
+ const innerRange = {
90
+ start: 4,
91
+ end: 2
92
+ };
93
+ const outerRange = {
94
+ start: 2,
95
+ end: 5
96
+ };
97
+ const sequenceLength = 10;
98
+ const flippedInnerRange = flipContainedRange(
99
+ innerRange,
100
+ outerRange,
101
+ sequenceLength
102
+ );
103
+ flippedInnerRange.should.deep.equal({
104
+ start: 5,
105
+ end: 3
106
+ });
107
+ });
88
108
 
89
- it('inner fully spans outer, does not wrap origin', function () {
90
- const innerRange ={
91
- start: 1,
92
- end: 7
93
- };
94
- const outerRange = {
95
- start: 2,
96
- end:5
97
- };
98
- const sequenceLength = 10;
99
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
100
- flippedInnerRange.should.deep.equal({
101
- start: 0,
102
- end:6
103
- })
104
- });
105
-
106
- it('inner fully spans outer, does wrap origin', function () {
107
- const innerRange ={
108
- start: 4,
109
- end: 2
110
- };
111
- const outerRange = {
112
- start: 5,
113
- end:2
114
- };
115
- const sequenceLength = 10;
116
- const flippedInnerRange = flipContainedRange(innerRange, outerRange, sequenceLength);
117
- flippedInnerRange.should.deep.equal({
118
- start: 5,
119
- end:3
120
- })
121
- });
109
+ it("inner fully spans outer, does not wrap origin", function () {
110
+ const innerRange = {
111
+ start: 1,
112
+ end: 7
113
+ };
114
+ const outerRange = {
115
+ start: 2,
116
+ end: 5
117
+ };
118
+ const sequenceLength = 10;
119
+ const flippedInnerRange = flipContainedRange(
120
+ innerRange,
121
+ outerRange,
122
+ sequenceLength
123
+ );
124
+ flippedInnerRange.should.deep.equal({
125
+ start: 0,
126
+ end: 6
127
+ });
128
+ });
122
129
 
130
+ it("inner fully spans outer, does wrap origin", function () {
131
+ const innerRange = {
132
+ start: 4,
133
+ end: 2
134
+ };
135
+ const outerRange = {
136
+ start: 5,
137
+ end: 2
138
+ };
139
+ const sequenceLength = 10;
140
+ const flippedInnerRange = flipContainedRange(
141
+ innerRange,
142
+ outerRange,
143
+ sequenceLength
144
+ );
145
+ flippedInnerRange.should.deep.equal({
146
+ start: 5,
147
+ end: 3
148
+ });
149
+ });
123
150
  });
124
-
@@ -1,20 +1,22 @@
1
- import normalizePositionByRangeLength from './normalizePositionByRangeLength';
1
+ import normalizePositionByRangeLength from "./normalizePositionByRangeLength";
2
2
 
3
3
  export default function generateRandomRange(minStart, maxEnd, maxLength) {
4
- const start = getRandomInt(minStart, maxEnd);
5
- let end;
6
- if (maxLength) {
7
- end = normalizePositionByRangeLength(getRandomInt(start, start + maxLength), maxEnd)
8
- } else {
9
- end = getRandomInt(minStart, maxEnd);
10
- }
11
- return {
12
- start: start,
13
- end: end,
14
- }
15
- };
16
-
4
+ const start = getRandomInt(minStart, maxEnd);
5
+ let end;
6
+ if (maxLength) {
7
+ end = normalizePositionByRangeLength(
8
+ getRandomInt(start, start + maxLength),
9
+ maxEnd
10
+ );
11
+ } else {
12
+ end = getRandomInt(minStart, maxEnd);
13
+ }
14
+ return {
15
+ start: start,
16
+ end: end
17
+ };
18
+ }
17
19
 
18
20
  function getRandomInt(min, max) {
19
- return Math.floor(Math.random() * (max - min)) + min;
21
+ return Math.floor(Math.random() * (max - min)) + min;
20
22
  }
@@ -1,24 +1,24 @@
1
- import getRangeLength from './getRangeLength';
2
- import generateRandomRange from './generateRandomRange';
3
- import chai from 'chai';
1
+ import getRangeLength from "./getRangeLength";
2
+ import generateRandomRange from "./generateRandomRange";
3
+ import chai from "chai";
4
4
  chai.should();
5
5
 
6
- describe('generateRandomRange', function () {
7
- it('should generate random ranges between a start and end', function () {
8
- for (let i = 0; i < 1000; i++) {
9
- const range = generateRandomRange(0,10);
10
- range.start.should.be.below(11)
11
- range.end.should.be.below(11)
12
- }
13
- });
6
+ describe("generateRandomRange", function () {
7
+ it("should generate random ranges between a start and end", function () {
8
+ for (let i = 0; i < 1000; i++) {
9
+ const range = generateRandomRange(0, 10);
10
+ range.start.should.be.below(11);
11
+ range.end.should.be.below(11);
12
+ }
13
+ });
14
14
 
15
- it('should generate random ranges between a start and end and with length less than maxLength', function () {
16
- for (let i = 0; i < 1000; i++) {
17
- const range = generateRandomRange(0,10,5);
18
- const length = getRangeLength(range);
19
- if (length > -1) {
20
- length.should.be.below(6)
21
- }
22
- }
23
- });
24
- });
15
+ it("should generate random ranges between a start and end and with length less than maxLength", function () {
16
+ for (let i = 0; i < 1000; i++) {
17
+ const range = generateRandomRange(0, 10, 5);
18
+ const length = getRangeLength(range);
19
+ if (length > -1) {
20
+ length.should.be.below(6);
21
+ }
22
+ }
23
+ });
24
+ });
@@ -1,24 +1,28 @@
1
1
  //function that returns the annotation range type
2
- export default function getAnnotationRangeType(annotationRange, enclosingRangeType, forward) {
3
- if (annotationRange.start === enclosingRangeType.start) {
4
- if (annotationRange.end === enclosingRangeType.end) {
5
- return 'beginningAndEnd';
6
- } else {
7
- if (forward) {
8
- return 'start';
9
- } else {
10
- return 'end';
11
- }
12
- }
2
+ export default function getAnnotationRangeType(
3
+ annotationRange,
4
+ enclosingRangeType,
5
+ forward
6
+ ) {
7
+ if (annotationRange.start === enclosingRangeType.start) {
8
+ if (annotationRange.end === enclosingRangeType.end) {
9
+ return "beginningAndEnd";
13
10
  } else {
14
- if (annotationRange.end === enclosingRangeType.end) {
15
- if (forward) {
16
- return 'end';
17
- } else {
18
- return 'start';
19
- }
20
- } else {
21
- return 'middle';
22
- }
11
+ if (forward) {
12
+ return "start";
13
+ } else {
14
+ return "end";
15
+ }
23
16
  }
24
- };
17
+ } else {
18
+ if (annotationRange.end === enclosingRangeType.end) {
19
+ if (forward) {
20
+ return "end";
21
+ } else {
22
+ return "start";
23
+ }
24
+ } else {
25
+ return "middle";
26
+ }
27
+ }
28
+ }