-
Alexander Rose authoredAlexander Rose authored
sorted-ranges.spec.ts 2.52 KiB
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import SortedRanges from '../sorted-ranges'
import OrderedSet from '../ordered-set';
import SortedArray from '../sorted-array';
describe('rangesArray', () => {
function test(name: string, a: any, b: any) {
it(name, () => expect(a).toEqual(b));
}
function testIterator(name: string, ranges: SortedRanges, set: OrderedSet, expectedValues: { index: number[], start: number[], end: number[]}) {
it(`iterator, ${name}`, () => {
const rangesIt = SortedRanges.transientSegments(ranges, set)
const { index, start, end } = expectedValues
let i = 0
while (rangesIt.hasNext) {
const segment = rangesIt.move()
expect(segment.index).toBe(index[i])
expect(segment.start).toBe(start[i])
expect(segment.end).toBe(end[i])
++i
}
expect(i).toBe(index.length)
})
}
const a1234 = SortedRanges.ofSortedRanges([1, 2, 3, 4]);
const a1134 = SortedRanges.ofSortedRanges([1, 1, 3, 4]);
test('size', SortedRanges.size(a1234), 4);
test('size', SortedRanges.size(a1134), 3);
test('min/max', [SortedRanges.min(a1234), SortedRanges.max(a1234)], [1, 4]);
test('start/end', [SortedRanges.start(a1234), SortedRanges.end(a1234)], [1, 5]);
testIterator('two ranges',
SortedRanges.ofSortedRanges([1, 2, 3, 4]),
OrderedSet.ofBounds(1, 4),
{ index: [0, 1], start: [0, 2], end: [2, 4] }
)
testIterator('first range',
SortedRanges.ofSortedRanges([1, 2, 3, 4]),
SortedArray.ofSortedArray([2]),
{ index: [0], start: [0], end: [1] }
)
testIterator('second range',
SortedRanges.ofSortedRanges([1, 2, 3, 4]),
SortedArray.ofSortedArray([4]),
{ index: [1], start: [0], end: [1] }
)
testIterator('set not in ranges',
SortedRanges.ofSortedRanges([1, 2, 3, 4]),
SortedArray.ofSortedArray([10]),
{ index: [], start: [], end: [] }
)
testIterator('set in second range and beyond',
SortedRanges.ofSortedRanges([1, 2, 3, 4]),
SortedArray.ofSortedArray([3, 10]),
{ index: [1], start: [0], end: [2] }
)
testIterator('length 1 range',
SortedRanges.ofSortedRanges([1, 1, 3, 4]),
SortedArray.ofSortedArray([0, 1, 10]),
{ index: [0], start: [1], end: [2] }
)
});