|
1 | 1 | /* eslint-env jest */
|
2 | 2 |
|
3 |
| -const Tree = require('avl') |
4 |
| -const compareSegments = require('../src/compare-segments') |
5 |
| -const Segment = require('../src/segment') |
| 3 | +const SweepLine = require('../src/sweep-line') |
| 4 | + |
| 5 | +const comparator = (a, b) => { |
| 6 | + if (a === b) return 0 |
| 7 | + return a < b ? -1 : 1 |
| 8 | +} |
6 | 9 |
|
7 | 10 | describe('sweep line', () => {
|
8 |
| - const s = [[[16, 282], [298, 359], [153, 203.5], [16, 282]]] |
9 |
| - const c = [[[56, 181], [153, 294.5], [241.5, 229.5], [108.5, 120], [56, 181]]] |
10 |
| - |
11 |
| - test('general', () => { |
12 |
| - const EF = new Segment(s[0][0], s[0][2], true).leftSE |
13 |
| - const EG = new Segment(s[0][0], s[0][1], true).leftSE |
14 |
| - |
15 |
| - const tree = new Tree(compareSegments) |
16 |
| - tree.insert(EF) |
17 |
| - tree.insert(EG) |
18 |
| - |
19 |
| - expect(tree.find(EF).key).toBe(EF) |
20 |
| - expect(tree.minNode().key).toBe(EF) |
21 |
| - expect(tree.maxNode().key).toBe(EG) |
22 |
| - |
23 |
| - let it = tree.find(EF) |
24 |
| - expect(tree.next(it).key).toBe(EG) |
25 |
| - it = tree.find(EG) |
26 |
| - expect(tree.prev(it).key).toBe(EF) |
27 |
| - |
28 |
| - const DA = new Segment(c[0][0], c[0][2], true).leftSE |
29 |
| - const DC = new Segment(c[0][0], c[0][1], true).leftSE |
30 |
| - |
31 |
| - tree.insert(DA) |
32 |
| - tree.insert(DC) |
33 |
| - |
34 |
| - let node = tree.minNode() |
35 |
| - expect(node.key).toBe(DA) |
36 |
| - node = tree.next(node) |
37 |
| - expect(node.key).toBe(DC) |
38 |
| - node = tree.next(node) |
39 |
| - expect(node.key).toBe(EF) |
40 |
| - node = tree.next(node) |
41 |
| - expect(node.key).toBe(EG) |
| 11 | + test('fill it up then empty it out', () => { |
| 12 | + const sl = new SweepLine(comparator) |
| 13 | + const k1 = 4 |
| 14 | + const k2 = 9 |
| 15 | + const k3 = 13 |
| 16 | + const k4 = 44 |
| 17 | + |
| 18 | + let n1 = sl.insert(k1) |
| 19 | + let n2 = sl.insert(k2) |
| 20 | + let n4 = sl.insert(k4) |
| 21 | + let n3 = sl.insert(k3) |
| 22 | + |
| 23 | + expect(sl.find(k1)).toBe(n1) |
| 24 | + expect(sl.find(k2)).toBe(n2) |
| 25 | + expect(sl.find(k3)).toBe(n3) |
| 26 | + expect(sl.find(k4)).toBe(n4) |
| 27 | + |
| 28 | + expect(sl.prevKey(n1)).toBeNull() |
| 29 | + expect(sl.nextKey(n1)).toBe(k2) |
| 30 | + |
| 31 | + expect(sl.prevKey(n2)).toBe(k1) |
| 32 | + expect(sl.nextKey(n2)).toBe(k3) |
| 33 | + |
| 34 | + expect(sl.prevKey(n3)).toBe(k2) |
| 35 | + expect(sl.nextKey(n3)).toBe(k4) |
| 36 | + |
| 37 | + expect(sl.prevKey(n4)).toBe(k3) |
| 38 | + expect(sl.nextKey(n4)).toBeNull() |
| 39 | + |
| 40 | + sl.remove(k2) |
| 41 | + expect(sl.find(k2)).toBeNull() |
| 42 | + |
| 43 | + expect(() => sl.nextKey(n1)).toThrow() |
| 44 | + expect(() => sl.nextKey(n2)).toThrow() |
| 45 | + expect(() => sl.nextKey(n3)).toThrow() |
| 46 | + expect(() => sl.nextKey(n4)).toThrow() |
| 47 | + |
| 48 | + n1 = sl.find(k1) |
| 49 | + n3 = sl.find(k3) |
| 50 | + n4 = sl.find(k4) |
| 51 | + |
| 52 | + expect(sl.prevKey(n1)).toBeNull() |
| 53 | + expect(sl.nextKey(n1)).toBe(k3) |
| 54 | + |
| 55 | + expect(sl.prevKey(n3)).toBe(k1) |
| 56 | + expect(sl.nextKey(n3)).toBe(k4) |
| 57 | + |
| 58 | + expect(sl.prevKey(n4)).toBe(k3) |
| 59 | + expect(sl.nextKey(n4)).toBeNull() |
| 60 | + |
| 61 | + sl.remove(k4) |
| 62 | + expect(sl.find(k4)).toBeNull() |
| 63 | + |
| 64 | + expect(() => sl.prevKey(n1)).toThrow() |
| 65 | + expect(() => sl.prevKey(n3)).toThrow() |
| 66 | + expect(() => sl.prevKey(n4)).toThrow() |
| 67 | + |
| 68 | + n1 = sl.find(k1) |
| 69 | + n3 = sl.find(k3) |
| 70 | + |
| 71 | + expect(sl.prevKey(n1)).toBeNull() |
| 72 | + expect(sl.nextKey(n1)).toBe(k3) |
| 73 | + |
| 74 | + expect(sl.prevKey(n3)).toBe(k1) |
| 75 | + expect(sl.nextKey(n3)).toBeNull() |
| 76 | + |
| 77 | + sl.remove(k1) |
| 78 | + expect(sl.find(k1)).toBeNull() |
| 79 | + |
| 80 | + expect(() => sl.nextKey(n1)).toThrow() |
| 81 | + expect(() => sl.nextKey(n4)).toThrow() |
| 82 | + |
| 83 | + n3 = sl.find(k3) |
| 84 | + |
| 85 | + expect(sl.prevKey(n3)).toBeNull() |
| 86 | + expect(sl.nextKey(n3)).toBeNull() |
| 87 | + |
| 88 | + sl.remove(k3) |
| 89 | + expect(sl.find(k3)).toBeNull() |
42 | 90 | })
|
43 | 91 | })
|
0 commit comments