|
@@ -0,0 +1,72 @@
|
|
|
+/**
|
|
|
+ * 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] }
|
|
|
+ )
|
|
|
+});
|