forked from w8r/martinez
-
Notifications
You must be signed in to change notification settings - Fork 0
/
compare_events.test.js
102 lines (72 loc) · 2.66 KB
/
compare_events.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import tap from 'tape';
import Queue from 'tinyqueue';
import sweepEventsComp from '../src/compare_events';
import SweepEvent from '../src/sweep_event';
tap.test('queue', (main) => {
main.test('queue should process lest(by x) sweep event first', (t) => {
const queue = new Queue(null, sweepEventsComp);
const e1 = {point: [0.0, 0.0]};
const e2 = {point: [0.5, 0.5]};
queue.push(e1);
queue.push(e2);
t.equals(e1, queue.pop());
t.equals(e2, queue.pop());
t.end();
});
main.test('queue should process lest(by y) sweep event first', (t) => {
const queue = new Queue(null, sweepEventsComp);
const e1 = {point: [0.0, 0.0]};
const e2 = {point: [0.0, 0.5]};
queue.push(e1);
queue.push(e2);
t.equals(e1, queue.pop());
t.equals(e2, queue.pop());
t.end();
});
main.test('queue should pop least(by left prop) sweep event first', (t) => {
const queue = new Queue(null, sweepEventsComp);
const e1 = {point: [0.0, 0.0], left: true};
const e2 = {point: [0.0, 0.0], left: false};
queue.push(e1);
queue.push(e2);
t.equals(e2, queue.pop());
t.equals(e1, queue.pop());
t.end();
});
main.end();
});
tap.test('sweep event comparison x coordinates', (t) => {
const e1 = {point: [0.0, 0.0]};
const e2 = {point: [0.5, 0.5]};
t.equals(sweepEventsComp(e1, e2), -1);
t.equals(sweepEventsComp(e2, e1), 1);
t.end();
});
tap.test('sweep event comparison y coordinates', (t) => {
const e1 = {point: [0.0, 0.0]};
const e2 = {point: [0.0, 0.5]};
t.equals(sweepEventsComp(e1, e2), -1);
t.equals(sweepEventsComp(e2, e1), 1);
t.end();
});
tap.test('sweep event comparison not left first', (t) => {
const e1 = {point: [0.0, 0.0], left: true};
const e2 = {point: [0.0, 0.0], left: false};
t.equals(sweepEventsComp(e1, e2), 1);
t.equals(sweepEventsComp(e2, e1), -1);
t.end();
});
tap.test('sweep event comparison shared start point not collinear edges', (t) => {
const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false));
const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 3], false));
t.equals(sweepEventsComp(e1, e2), -1, 'lower is processed first');
t.equals(sweepEventsComp(e2, e1), 1, 'higher is processed second');
t.end();
});
tap.test('sweep event comparison collinear edges', (t) => {
const e1 = new SweepEvent([0.0, 0.0], true, new SweepEvent([1, 1], false), true);
const e2 = new SweepEvent([0.0, 0.0], true, new SweepEvent([2, 2], false), false);
t.equals(sweepEventsComp(e1, e2), -1, 'clipping is processed first');
t.equals(sweepEventsComp(e2, e1), 1, 'subject is processed second');
t.end();
});