function testOverlap(range1, range2) {
if (range1[1] <= range2[0] || range1[0] >= range2[1]) {
return null;
} else if (range1[0] <= range2[0] && range1[1] >= range2[1]) {
const overlapIndices = [range2[0], range2[1]];
const overlapInR1 = [
overlapIndices[0] - range1[0],
overlapIndices[1] - range1[0]
];
const overlapInR2 = [0, overlapIndices[1] - range2[0]];
return {
type: "Coverage",
ranges: [
{ range: range1, overlap: overlapInR1 },
{ range: range2, overlap: overlapInR2 }
]
};
} else if (range1[0] >= range2[0] && range1[1] <= range2[1]) {
const overlapIndices = [range1[0], range1[1]];
const overlapInR1 = [0, overlapIndices[1] - range1[0]];
const overlapInR2 = [
overlapIndices[0] - range2[0],
overlapIndices[1] - range2[0]
];
return {
type: "Coverage",
ranges: [
{ range: range2, overlap: overlapInR2 },
{ range: range1, overlap: overlapInR1 }
]
};
} else if (range1[1] >= range2[0] && range1[0] < range2[0]) {
const overlapIndices = [range2[0], range1[1]];
const overlapInR1 = [
overlapIndices[0] - range1[0],
overlapIndices[1] - range1[0]
];
const overlapInR2 = [0, overlapIndices[1] - range2[0]];
return {
type: "Overlap",
ranges: [
{ range: range1, overlap: overlapInR1 },
{ range: range2, overlap: overlapInR2 }
]
};
} else if (range1[0] <= range2[1] && range1[1] > range2[1]) {
const overlapIndices = [range1[0], range2[1]];
const overlapInR1 = [
overlapIndices[0] - range1[0],
overlapIndices[1] - range1[0]
];
const overlapInR2 = [overlapIndices[0] - range2[0], range2[1] - range2[0]];
return {
type: "Overlap",
ranges: [
{ range: range1, overlap: overlapInR1 },
{ range: range2, overlap: overlapInR2 }
]
};
}
}