join(other) {
        return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));
    }
for all numbers n: range1.contains(n) or range2.contains(n) => range1.join(range2).contains(n)
The joined range is the smallest range that contains both ranges.