@pie-lib/plot 3.1.0-next.0 → 3.1.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,265 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
- var _react = require("@testing-library/react");
6
- var _react2 = _interopRequireDefault(require("react"));
7
- var _root = require("../root");
8
- var _d3Selection = require("d3-selection");
9
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
- jest.mock('d3-selection', function () {
12
- return {
13
- select: jest.fn(),
14
- mouse: jest.fn()
15
- };
16
- });
17
- var scaleMock = function scaleMock() {
18
- var fn = jest.fn(function (n) {
19
- return n;
20
- });
21
- fn.invert = jest.fn(function (n) {
22
- return n;
23
- });
24
- return fn;
25
- };
26
- var graphProps = function graphProps() {
27
- return {
28
- scale: {
29
- x: scaleMock(),
30
- y: scaleMock()
31
- },
32
- snap: {
33
- x: jest.fn(function (n) {
34
- return n;
35
- }),
36
- y: jest.fn(function (n) {
37
- return n;
38
- })
39
- },
40
- domain: {
41
- min: 0,
42
- max: 1,
43
- step: 1
44
- },
45
- range: {
46
- min: 0,
47
- max: 1,
48
- step: 1
49
- },
50
- size: {
51
- width: 400,
52
- height: 400
53
- }
54
- };
55
- };
56
- describe('root', function () {
57
- var mockOn;
58
- var defaultProps;
59
- beforeEach(function () {
60
- mockOn = jest.fn();
61
- _d3Selection.select.mockReturnValue({
62
- on: mockOn
63
- });
64
- _d3Selection.mouse.mockReturnValue([0, 0]);
65
- defaultProps = {
66
- classes: {},
67
- graphProps: graphProps()
68
- };
69
- });
70
- afterEach(function () {
71
- (0, _react.cleanup)();
72
- jest.clearAllMocks();
73
- });
74
- it('renders with children', function () {
75
- var _render = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
76
- container = _render.container,
77
- getByText = _render.getByText;
78
- expect(container.firstChild).toBeInTheDocument();
79
- expect(getByText('hi')).toBeInTheDocument();
80
- });
81
- describe('logic', function () {
82
- describe('mousemove', function () {
83
- describe('mount/unmount', function () {
84
- it('adds mousemove listener on componentDidMount', function () {
85
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi"));
86
-
87
- // Verify that select was called with the g element
88
- expect(_d3Selection.select).toHaveBeenCalled();
89
-
90
- // Verify that on() was called with 'mousemove' and a function
91
- expect(mockOn).toHaveBeenCalledWith('mousemove', expect.any(Function));
92
- });
93
- it('removes mousemove listener on componentWillUnmount', function () {
94
- var _render2 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
95
- unmount = _render2.unmount;
96
-
97
- // Clear previous calls to isolate unmount behavior
98
- mockOn.mockClear();
99
- _d3Selection.select.mockClear();
100
- unmount();
101
-
102
- // Verify that select was called during unmount
103
- expect(_d3Selection.select).toHaveBeenCalled();
104
-
105
- // Verify that on() was called with 'mousemove' and null to remove the listener
106
- expect(mockOn).toHaveBeenCalledWith('mousemove', null);
107
- });
108
- });
109
- describe('mouseMove function', function () {
110
- it('calls mouse with correct arguments', function () {
111
- var onMouseMove = jest.fn();
112
- var gp = graphProps();
113
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
114
- onMouseMove: onMouseMove,
115
- graphProps: gp
116
- });
117
- var mockNode = document.createElement('div');
118
- var mockSelection = {
119
- _groups: [[mockNode]],
120
- node: function node() {
121
- return mockNode;
122
- }
123
- };
124
-
125
- // Mock select to return our mockSelection
126
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
127
- on: function on(event, handler) {
128
- mockOn(event, handler);
129
- // When 'mousemove' is registered, immediately test it
130
- if (event === 'mousemove' && handler) {
131
- _d3Selection.mouse.mockReturnValue([10, 20]);
132
- // Handler is bound with mockSelection as first arg, so call with no args
133
- handler();
134
- }
135
- }
136
- }));
137
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
138
-
139
- // Verify mouse was called with the correct node
140
- expect(_d3Selection.mouse).toHaveBeenCalledWith(mockNode);
141
- });
142
- it('calls scale.x.invert and scale.y.invert', function () {
143
- var onMouseMove = jest.fn();
144
- var gp = graphProps();
145
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
146
- onMouseMove: onMouseMove,
147
- graphProps: gp
148
- });
149
- var mockNode = document.createElement('div');
150
- var mockSelection = {
151
- _groups: [[mockNode]],
152
- node: function node() {
153
- return mockNode;
154
- }
155
- };
156
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
157
- on: function on(event, handler) {
158
- mockOn(event, handler);
159
- if (event === 'mousemove' && handler) {
160
- _d3Selection.mouse.mockReturnValue([15, 25]);
161
- handler();
162
- }
163
- }
164
- }));
165
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
166
- expect(gp.scale.x.invert).toHaveBeenCalledWith(15);
167
- expect(gp.scale.y.invert).toHaveBeenCalledWith(25);
168
- });
169
- it('calls snap.x and snap.y with inverted coordinates', function () {
170
- var onMouseMove = jest.fn();
171
- var gp = graphProps();
172
- gp.scale.x.invert = jest.fn().mockReturnValue(5);
173
- gp.scale.y.invert = jest.fn().mockReturnValue(10);
174
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
175
- onMouseMove: onMouseMove,
176
- graphProps: gp
177
- });
178
- var mockNode = document.createElement('div');
179
- var mockSelection = {
180
- _groups: [[mockNode]],
181
- node: function node() {
182
- return mockNode;
183
- }
184
- };
185
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
186
- on: function on(event, handler) {
187
- mockOn(event, handler);
188
- if (event === 'mousemove' && handler) {
189
- _d3Selection.mouse.mockReturnValue([15, 25]);
190
- handler();
191
- }
192
- }
193
- }));
194
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
195
- expect(gp.snap.x).toHaveBeenCalledWith(5);
196
- expect(gp.snap.y).toHaveBeenCalledWith(10);
197
- });
198
- it('calls onMouseMove handler with snapped coordinates', function () {
199
- var onMouseMove = jest.fn();
200
- var gp = graphProps();
201
- gp.scale.x.invert = jest.fn().mockReturnValue(7);
202
- gp.scale.y.invert = jest.fn().mockReturnValue(14);
203
- gp.snap.x = jest.fn().mockReturnValue(10);
204
- gp.snap.y = jest.fn().mockReturnValue(15);
205
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
206
- onMouseMove: onMouseMove,
207
- graphProps: gp
208
- });
209
- var mockNode = document.createElement('div');
210
- var mockSelection = {
211
- _groups: [[mockNode]],
212
- node: function node() {
213
- return mockNode;
214
- }
215
- };
216
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
217
- on: function on(event, handler) {
218
- mockOn(event, handler);
219
- if (event === 'mousemove' && handler) {
220
- _d3Selection.mouse.mockReturnValue([100, 200]);
221
- handler();
222
- }
223
- }
224
- }));
225
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
226
- expect(onMouseMove).toHaveBeenCalledWith({
227
- x: 10,
228
- y: 15
229
- });
230
- });
231
- it('does not call onMouseMove when handler is not provided', function () {
232
- var gp = graphProps();
233
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
234
- graphProps: gp
235
- });
236
- var mockNode = document.createElement('div');
237
- var mockSelection = {
238
- _groups: [[mockNode]],
239
- node: function node() {
240
- return mockNode;
241
- }
242
- };
243
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
244
- on: function on(event, handler) {
245
- mockOn(event, handler);
246
- if (event === 'mousemove' && handler) {
247
- _d3Selection.mouse.mockReturnValue([100, 200]);
248
- // Should not throw error when onMouseMove is not provided
249
- expect(function () {
250
- return handler();
251
- }).not.toThrow();
252
- }
253
- }
254
- }));
255
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
256
-
257
- // Verify scale methods were not called (early return in mouseMove)
258
- expect(gp.scale.x.invert).not.toHaveBeenCalled();
259
- expect(gp.scale.y.invert).not.toHaveBeenCalled();
260
- });
261
- });
262
- });
263
- });
264
- });
265
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcm9vdCIsIl9kM1NlbGVjdGlvbiIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJzZWxlY3QiLCJmbiIsIm1vdXNlIiwic2NhbGVNb2NrIiwibiIsImludmVydCIsImdyYXBoUHJvcHMiLCJzY2FsZSIsIngiLCJ5Iiwic25hcCIsImRvbWFpbiIsIm1pbiIsIm1heCIsInN0ZXAiLCJyYW5nZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImRlc2NyaWJlIiwibW9ja09uIiwiZGVmYXVsdFByb3BzIiwiYmVmb3JlRWFjaCIsIm1vY2tSZXR1cm5WYWx1ZSIsIm9uIiwiY2xhc3NlcyIsImFmdGVyRWFjaCIsImNsZWFudXAiLCJjbGVhckFsbE1vY2tzIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIlJvb3QiLCJjb250YWluZXIiLCJnZXRCeVRleHQiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhbnkiLCJGdW5jdGlvbiIsIl9yZW5kZXIyIiwidW5tb3VudCIsIm1vY2tDbGVhciIsIm9uTW91c2VNb3ZlIiwiZ3AiLCJwcm9wcyIsIm1vY2tOb2RlIiwiZG9jdW1lbnQiLCJtb2NrU2VsZWN0aW9uIiwiX2dyb3VwcyIsIm5vZGUiLCJldmVudCIsImhhbmRsZXIiLCJub3QiLCJ0b1Rocm93Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9yb290LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgY2xlYW51cCB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJvb3QgfSBmcm9tICcuLi9yb290JztcbmltcG9ydCB7IHNlbGVjdCwgbW91c2UgfSBmcm9tICdkMy1zZWxlY3Rpb24nO1xuXG5qZXN0Lm1vY2soJ2QzLXNlbGVjdGlvbicsICgpID0+ICh7XG4gIHNlbGVjdDogamVzdC5mbigpLFxuICBtb3VzZTogamVzdC5mbigpLFxufSkpO1xuXG5jb25zdCBzY2FsZU1vY2sgPSAoKSA9PiB7XG4gIGNvbnN0IGZuID0gamVzdC5mbigobikgPT4gbik7XG4gIGZuLmludmVydCA9IGplc3QuZm4oKG4pID0+IG4pO1xuICByZXR1cm4gZm47XG59O1xuXG5jb25zdCBncmFwaFByb3BzID0gKCkgPT4gKHtcbiAgc2NhbGU6IHtcbiAgICB4OiBzY2FsZU1vY2soKSxcbiAgICB5OiBzY2FsZU1vY2soKSxcbiAgfSxcbiAgc25hcDoge1xuICAgIHg6IGplc3QuZm4oKG4pID0+IG4pLFxuICAgIHk6IGplc3QuZm4oKG4pID0+IG4pLFxuICB9LFxuICBkb21haW46IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAxLFxuICAgIHN0ZXA6IDEsXG4gIH0sXG4gIHJhbmdlOiB7XG4gICAgbWluOiAwLFxuICAgIG1heDogMSxcbiAgICBzdGVwOiAxLFxuICB9LFxuICBzaXplOiB7XG4gICAgd2lkdGg6IDQwMCxcbiAgICBoZWlnaHQ6IDQwMCxcbiAgfSxcbn0pO1xuXG5kZXNjcmliZSgncm9vdCcsICgpID0+IHtcbiAgbGV0IG1vY2tPbjtcbiAgbGV0IGRlZmF1bHRQcm9wcztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrT24gPSBqZXN0LmZuKCk7XG4gICAgc2VsZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICBvbjogbW9ja09uLFxuICAgIH0pO1xuICAgIG1vdXNlLm1vY2tSZXR1cm5WYWx1ZShbMCwgMF0pO1xuXG4gICAgZGVmYXVsdFByb3BzID0ge1xuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdpdGggY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIGdldEJ5VGV4dCB9ID0gcmVuZGVyKFxuICAgICAgPFJvb3Qgey4uLmRlZmF1bHRQcm9wc30+aGk8L1Jvb3Q+XG4gICAgKTtcbiAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KGdldEJ5VGV4dCgnaGknKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xvZ2ljJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdtb3VzZW1vdmUnLCAoKSA9PiB7XG4gICAgICBkZXNjcmliZSgnbW91bnQvdW5tb3VudCcsICgpID0+IHtcbiAgICAgICAgaXQoJ2FkZHMgbW91c2Vtb3ZlIGxpc3RlbmVyIG9uIGNvbXBvbmVudERpZE1vdW50JywgKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4uZGVmYXVsdFByb3BzfT5oaTwvUm9vdD4pO1xuXG4gICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgc2VsZWN0IHdhcyBjYWxsZWQgd2l0aCB0aGUgZyBlbGVtZW50XG4gICAgICAgICAgZXhwZWN0KHNlbGVjdCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgb24oKSB3YXMgY2FsbGVkIHdpdGggJ21vdXNlbW92ZScgYW5kIGEgZnVuY3Rpb25cbiAgICAgICAgICBleHBlY3QobW9ja09uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnbW91c2Vtb3ZlJywgZXhwZWN0LmFueShGdW5jdGlvbikpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgncmVtb3ZlcyBtb3VzZW1vdmUgbGlzdGVuZXIgb24gY29tcG9uZW50V2lsbFVubW91bnQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB1bm1vdW50IH0gPSByZW5kZXIoPFJvb3Qgey4uLmRlZmF1bHRQcm9wc30+aGk8L1Jvb3Q+KTtcblxuICAgICAgICAgIC8vIENsZWFyIHByZXZpb3VzIGNhbGxzIHRvIGlzb2xhdGUgdW5tb3VudCBiZWhhdmlvclxuICAgICAgICAgIG1vY2tPbi5tb2NrQ2xlYXIoKTtcbiAgICAgICAgICBzZWxlY3QubW9ja0NsZWFyKCk7XG5cbiAgICAgICAgICB1bm1vdW50KCk7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBzZWxlY3Qgd2FzIGNhbGxlZCBkdXJpbmcgdW5tb3VudFxuICAgICAgICAgIGV4cGVjdChzZWxlY3QpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IG9uKCkgd2FzIGNhbGxlZCB3aXRoICdtb3VzZW1vdmUnIGFuZCBudWxsIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXJcbiAgICAgICAgICBleHBlY3QobW9ja09uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnbW91c2Vtb3ZlJywgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdtb3VzZU1vdmUgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGl0KCdjYWxscyBtb3VzZSB3aXRoIGNvcnJlY3QgYXJndW1lbnRzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gamVzdC5mbigpO1xuICAgICAgICAgIGNvbnN0IGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmUsXG4gICAgICAgICAgICBncmFwaFByb3BzOiBncCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgbW9ja05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCBtb2NrU2VsZWN0aW9uID0ge1xuICAgICAgICAgICAgX2dyb3VwczogW1ttb2NrTm9kZV1dLFxuICAgICAgICAgICAgbm9kZTogKCkgPT4gbW9ja05vZGUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIE1vY2sgc2VsZWN0IHRvIHJldHVybiBvdXIgbW9ja1NlbGVjdGlvblxuICAgICAgICAgIHNlbGVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgICAgLi4ubW9ja1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9uOiAoZXZlbnQsIGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgICAgbW9ja09uKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgLy8gV2hlbiAnbW91c2Vtb3ZlJyBpcyByZWdpc3RlcmVkLCBpbW1lZGlhdGVseSB0ZXN0IGl0XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIG1vdXNlLm1vY2tSZXR1cm5WYWx1ZShbMTAsIDIwXSk7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlciBpcyBib3VuZCB3aXRoIG1vY2tTZWxlY3Rpb24gYXMgZmlyc3QgYXJnLCBzbyBjYWxsIHdpdGggbm8gYXJnc1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4ucHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgbW91c2Ugd2FzIGNhbGxlZCB3aXRoIHRoZSBjb3JyZWN0IG5vZGVcbiAgICAgICAgICBleHBlY3QobW91c2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tOb2RlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NhbGxzIHNjYWxlLnguaW52ZXJ0IGFuZCBzY2FsZS55LmludmVydCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICBjb25zdCBncCA9IGdyYXBoUHJvcHMoKTtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IG1vY2tOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29uc3QgbW9ja1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIF9ncm91cHM6IFtbbW9ja05vZGVdXSxcbiAgICAgICAgICAgIG5vZGU6ICgpID0+IG1vY2tOb2RlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIC4uLm1vY2tTZWxlY3Rpb24sXG4gICAgICAgICAgICBvbjogKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgIG1vY2tPbihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIG1vdXNlLm1vY2tSZXR1cm5WYWx1ZShbMTUsIDI1XSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVuZGVyKDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+KTtcblxuICAgICAgICAgIGV4cGVjdChncC5zY2FsZS54LmludmVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMTUpO1xuICAgICAgICAgIGV4cGVjdChncC5zY2FsZS55LmludmVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMjUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnY2FsbHMgc25hcC54IGFuZCBzbmFwLnkgd2l0aCBpbnZlcnRlZCBjb29yZGluYXRlcycsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICBjb25zdCBncCA9IGdyYXBoUHJvcHMoKTtcbiAgICAgICAgICBncC5zY2FsZS54LmludmVydCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoNSk7XG4gICAgICAgICAgZ3Auc2NhbGUueS5pbnZlcnQgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDEwKTtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IG1vY2tOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29uc3QgbW9ja1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIF9ncm91cHM6IFtbbW9ja05vZGVdXSxcbiAgICAgICAgICAgIG5vZGU6ICgpID0+IG1vY2tOb2RlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIC4uLm1vY2tTZWxlY3Rpb24sXG4gICAgICAgICAgICBvbjogKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgIG1vY2tPbihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIG1vdXNlLm1vY2tSZXR1cm5WYWx1ZShbMTUsIDI1XSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVuZGVyKDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+KTtcblxuICAgICAgICAgIGV4cGVjdChncC5zbmFwLngpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDUpO1xuICAgICAgICAgIGV4cGVjdChncC5zbmFwLnkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NhbGxzIG9uTW91c2VNb3ZlIGhhbmRsZXIgd2l0aCBzbmFwcGVkIGNvb3JkaW5hdGVzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gamVzdC5mbigpO1xuICAgICAgICAgIGNvbnN0IGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIGdwLnNjYWxlLnguaW52ZXJ0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSg3KTtcbiAgICAgICAgICBncC5zY2FsZS55LmludmVydCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoMTQpO1xuICAgICAgICAgIGdwLnNuYXAueCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoMTApO1xuICAgICAgICAgIGdwLnNuYXAueSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoMTUpO1xuXG4gICAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgICAgICAgICBvbk1vdXNlTW92ZSxcbiAgICAgICAgICAgIGdyYXBoUHJvcHM6IGdwLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBtb2NrTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnN0IG1vY2tTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICBfZ3JvdXBzOiBbW21vY2tOb2RlXV0sXG4gICAgICAgICAgICBub2RlOiAoKSA9PiBtb2NrTm9kZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICAgICAgICAuLi5tb2NrU2VsZWN0aW9uLFxuICAgICAgICAgICAgb246IChldmVudCwgaGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgICBtb2NrT24oZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdtb3VzZW1vdmUnICYmIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBtb3VzZS5tb2NrUmV0dXJuVmFsdWUoWzEwMCwgMjAwXSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVuZGVyKDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+KTtcblxuICAgICAgICAgIGV4cGVjdChvbk1vdXNlTW92ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyB4OiAxMCwgeTogMTUgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdkb2VzIG5vdCBjYWxsIG9uTW91c2VNb3ZlIHdoZW4gaGFuZGxlciBpcyBub3QgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3AgPSBncmFwaFByb3BzKCk7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgICAgICAgICBncmFwaFByb3BzOiBncCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgbW9ja05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCBtb2NrU2VsZWN0aW9uID0ge1xuICAgICAgICAgICAgX2dyb3VwczogW1ttb2NrTm9kZV1dLFxuICAgICAgICAgICAgbm9kZTogKCkgPT4gbW9ja05vZGUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHNlbGVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgICAgLi4ubW9ja1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9uOiAoZXZlbnQsIGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgICAgbW9ja09uKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnbW91c2Vtb3ZlJyAmJiBoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgbW91c2UubW9ja1JldHVyblZhbHVlKFsxMDAsIDIwMF0pO1xuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBub3QgdGhyb3cgZXJyb3Igd2hlbiBvbk1vdXNlTW92ZSBpcyBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gaGFuZGxlcigpKS5ub3QudG9UaHJvdygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVuZGVyKDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+KTtcblxuICAgICAgICAgIC8vIFZlcmlmeSBzY2FsZSBtZXRob2RzIHdlcmUgbm90IGNhbGxlZCAoZWFybHkgcmV0dXJuIGluIG1vdXNlTW92ZSlcbiAgICAgICAgICBleHBlY3QoZ3Auc2NhbGUueC5pbnZlcnQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgZXhwZWN0KGdwLnNjYWxlLnkuaW52ZXJ0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtc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NUQsQ0FBQyxDQUFDO1FBRUZvQixFQUFFLENBQUMsd0RBQXdELEVBQUUsWUFBTTtVQUNqRSxJQUFNa0IsRUFBRSxHQUFHekMsVUFBVSxDQUFDLENBQUM7VUFDdkIsSUFBTTBDLEtBQUssR0FBQTFELGFBQUEsQ0FBQUEsYUFBQSxLQUNOK0IsWUFBWTtZQUNmZixVQUFVLEVBQUV5QztVQUFFLEVBQ2Y7VUFFRCxJQUFNRSxRQUFRLEdBQUdDLFFBQVEsQ0FBQ2xCLGFBQWEsQ0FBQyxLQUFLLENBQUM7VUFDOUMsSUFBTW1CLGFBQWEsR0FBRztZQUNwQkMsT0FBTyxFQUFFLENBQUMsQ0FBQ0gsUUFBUSxDQUFDLENBQUM7WUFDckJJLElBQUksRUFBRSxTQUFOQSxJQUFJQSxDQUFBO2NBQUEsT0FBUUosUUFBUTtZQUFBO1VBQ3RCLENBQUM7VUFFRGpELG1CQUFNLENBQUN1QixlQUFlLENBQUFqQyxhQUFBLENBQUFBLGFBQUEsS0FDakI2RCxhQUFhO1lBQ2hCM0IsRUFBRSxFQUFFLFNBQUpBLEVBQUVBLENBQUc4QixLQUFLLEVBQUVDLE9BQU8sRUFBSztjQUN0Qm5DLE1BQU0sQ0FBQ2tDLEtBQUssRUFBRUMsT0FBTyxDQUFDO2NBQ3RCLElBQUlELEtBQUssS0FBSyxXQUFXLElBQUlDLE9BQU8sRUFBRTtnQkFDcENyRCxrQkFBSyxDQUFDcUIsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQztnQkFDQWEsTUFBTSxDQUFDO2tCQUFBLE9BQU1tQixPQUFPLENBQUMsQ0FBQztnQkFBQSxFQUFDLENBQUNDLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7Y0FDdkM7WUFDRjtVQUFDLEVBQ0YsQ0FBQztVQUVGLElBQUExQixhQUFNLGVBQUMxRCxPQUFBLFlBQUEyRCxhQUFBLENBQUN6RCxLQUFBLENBQUEwRCxJQUFJLEVBQUtlLEtBQUssRUFBRSxJQUFRLENBQUMsQ0FBQzs7VUFFbEM7VUFDQVosTUFBTSxDQUFDVyxFQUFFLENBQUN4QyxLQUFLLENBQUNDLENBQUMsQ0FBQ0gsTUFBTSxDQUFDLENBQUNtRCxHQUFHLENBQUNqQixnQkFBZ0IsQ0FBQyxDQUFDO1VBQ2hESCxNQUFNLENBQUNXLEVBQUUsQ0FBQ3hDLEtBQUssQ0FBQ0UsQ0FBQyxDQUFDSixNQUFNLENBQUMsQ0FBQ21ELEdBQUcsQ0FBQ2pCLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO01BQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,168 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
5
- var _trig = require("../trig");
6
- var _utils = require("../utils");
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _templateObject, _templateObject2, _templateObject3;
9
- var log = (0, _debug["default"])('pie-lib:plot:trig:test');
10
- var vs = function vs(v) {
11
- if (!v) {
12
- return '';
13
- }
14
- if (Number.isFinite(v.x) && Number.isFinite(v.y)) {
15
- return "[".concat(v.x, ",").concat(v.y, "]");
16
- }
17
- return JSON.stringify(v);
18
- };
19
- var p = function p(strings) {
20
- for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
21
- values[_key - 1] = arguments[_key];
22
- }
23
- return strings.reduce(function (acc, s, index) {
24
- return "".concat(acc).concat(s).concat(vs(values[index]));
25
- }, '');
26
- };
27
- describe('trig', function () {
28
- describe('angle', function () {
29
- var assertAngle = function assertAngle(a, b, expected) {
30
- it(p(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["", ", ", " => ", ""])), a, b, (0, _trig.toDegrees)(expected)), function () {
31
- var result = (0, _trig.angle)(a, b);
32
- expect(result).toBeCloseTo(expected);
33
- });
34
- };
35
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
36
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1), (0, _trig.toRadians)(90));
37
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _trig.toRadians)(135));
38
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 0), (0, _trig.toRadians)(180));
39
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _trig.toRadians)(225));
40
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, -1), (0, _trig.toRadians)(270));
41
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, -1), (0, _trig.toRadians)(315));
42
- assertAngle((0, _utils.xy)(1, 1), (0, _utils.xy)(0, 0), (0, _trig.toRadians)(225));
43
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
44
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _trig.toRadians)(26.565));
45
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(3, 1), (0, _trig.toRadians)(18.434));
46
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(4, 1), (0, _trig.toRadians)(14.036));
47
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(5, 1), (0, _trig.toRadians)(11.309));
48
- });
49
- describe('acuteXAngle', function () {
50
- var assertAcute = function assertAcute(input, expected) {
51
- it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
52
- var result = (0, _trig.acuteXAngle)(input);
53
- log("result: ".concat((0, _trig.toDegrees)(result)));
54
- expect(result).toBeCloseTo(expected);
55
- });
56
- };
57
- assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
58
- assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(80));
59
- assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(10));
60
- assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(10));
61
- });
62
- describe('acuteYAngle', function () {
63
- var assertAcute = function assertAcute(input, expected) {
64
- it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
65
- var result = (0, _trig.acuteYAngle)(input);
66
- log("result: ".concat((0, _trig.toDegrees)(result)));
67
- expect(result).toBeCloseTo(expected);
68
- });
69
- };
70
- assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
71
- assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(10));
72
- assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(80));
73
- assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(80));
74
- });
75
- describe('edges', function () {
76
- var assertEdges = function assertEdges(domain, range) {
77
- return function (from, to, expected) {
78
- it(p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["", ", ", " + ", " -> ", " => ", "", ""])), domain, range, from, to, expected[0], expected[1]), function () {
79
- var result = (0, _trig.edges)(domain, range)(from, to);
80
- expect(result[0].x).toBeCloseTo(expected[0].x);
81
- expect(result[0].y).toBeCloseTo(expected[0].y);
82
- expect(result[1].x).toBeCloseTo(expected[1].x);
83
- expect(result[1].y).toBeCloseTo(expected[1].y);
84
- });
85
- };
86
- };
87
- var one = assertEdges({
88
- min: -4,
89
- max: 4
90
- }, {
91
- min: -4,
92
- max: 4
93
- });
94
- one((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
95
- one((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), [(0, _utils.xy)(4, 2), (0, _utils.xy)(-4, -2)]);
96
- one((0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
97
- one((0, _utils.xy)(1, 0), (0, _utils.xy)(2, 0), [(0, _utils.xy)(4, 0), (0, _utils.xy)(-4, 0)]);
98
- one((0, _utils.xy)(1, 0), (0, _utils.xy)(-2, 0), [(0, _utils.xy)(-4, 0), (0, _utils.xy)(4, 0)]);
99
-
100
- /**
101
- * domain {min: -5, max: 5, padding: 0, step: 1, labelStep: 1}labelStep: 1max: 5min: -5padding: 0step: 1__proto__: Object range: {min: -5, max: 5, padding: 0, step: 1, labelStep: 1} a: {x: -5, y: 0} b: {x: -5, y: 2} edges: Point {x: -5, y: 5} Point {x: -5, y: 2}
102
- */
103
- var lineIssue = assertEdges({
104
- min: -5,
105
- max: 5
106
- }, {
107
- min: -5,
108
- max: 5
109
- });
110
- lineIssue((0, _utils.xy)(-5, -0), (0, _utils.xy)(-5, 2), [(0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, -5)]);
111
- });
112
- describe('diffEdge', function () {
113
- var assertDiffEdge = function assertDiffEdge(bounds, from, to, expected) {
114
- it(p(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["<", "> ", " -> ", " => ", ""])), bounds, from, to, expected), function () {
115
- var result = (0, _trig.diffEdge)(bounds, from, to);
116
- expect(result.x).toBeCloseTo(expected.x);
117
- expect(result.y).toBeCloseTo(expected.y);
118
- });
119
- };
120
- var twoTwo = assertDiffEdge.bind(null, (0, _utils.xy)(2, 2));
121
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
122
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(1, 2));
123
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
124
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
125
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-2, 2));
126
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2));
127
- var fourFour = assertDiffEdge.bind(null, (0, _utils.xy)(4, 4));
128
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(4, 4));
129
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(2, 4));
130
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _utils.xy)(4, 2));
131
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
132
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
133
- assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-4, -4));
134
- assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(4, 4));
135
- assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3), (0, _utils.xy)(4, 4));
136
- assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2), (0, _utils.xy)(-4, -4));
137
- assertDiffEdge((0, _utils.xy)(-4, 4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, 0), (0, _utils.xy)(-4, 2));
138
- var lineIssue = assertDiffEdge.bind(null, (0, _utils.xy)(-5, -5));
139
- lineIssue((0, _utils.xy)(-5, 2), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -5));
140
- //Top Right
141
- assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(2, 5), (0, _utils.xy)(5, 5));
142
- assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, 1), (0, _utils.xy)(5, 5));
143
-
144
- // //Bottom Right
145
- assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, -0.1), (0, _utils.xy)(5, -5));
146
- assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(1, -5), (0, _utils.xy)(5, -5));
147
-
148
- //Top Left
149
- assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, 0.1), (0, _utils.xy)(-5, 5));
150
- assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(-1, 5), (0, _utils.xy)(-5, 5));
151
-
152
- //Bottom Left
153
- assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -0.1), (0, _utils.xy)(-5, -5));
154
- assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(-1, -5), (0, _utils.xy)(-5, -5));
155
- });
156
- describe('getOpposingSide', function () {
157
- var assertOpposingSide = function assertOpposingSide(hyp, angle, expected) {
158
- it("".concat(hyp, ", ").concat(angle, " = ").concat(expected), function () {
159
- var radians = (0, _trig.toRadians)(angle);
160
- var result = (0, _trig.getOpposingSide)(hyp, radians);
161
- expect(result).toBeCloseTo(expected);
162
- });
163
- };
164
- assertOpposingSide(1, 45, 0.707);
165
- assertOpposingSide(1.25, 45, 0.88);
166
- });
167
- });
168
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHJpZyIsInJlcXVpcmUiLCJfdXRpbHMiLCJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJsb2ciLCJkZWJ1ZyIsInZzIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwieCIsInkiLCJjb25jYXQiLCJKU09OIiwic3RyaW5naWZ5IiwicCIsInN0cmluZ3MiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidmFsdWVzIiwiQXJyYXkiLCJfa2V5IiwicmVkdWNlIiwiYWNjIiwicyIsImluZGV4IiwiZGVzY3JpYmUiLCJhc3NlcnRBbmdsZSIsImEiLCJiIiwiZXhwZWN0ZWQiLCJpdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwidG9EZWdyZWVzIiwicmVzdWx0IiwiYW5nbGUiLCJleHBlY3QiLCJ0b0JlQ2xvc2VUbyIsInh5IiwidG9SYWRpYW5zIiwiYXNzZXJ0QWN1dGUiLCJpbnB1dCIsImFjdXRlWEFuZ2xlIiwiYWN1dGVZQW5nbGUiLCJhc3NlcnRFZGdlcyIsImRvbWFpbiIsInJhbmdlIiwiZnJvbSIsInRvIiwiZWRnZXMiLCJvbmUiLCJtaW4iLCJtYXgiLCJsaW5lSXNzdWUiLCJhc3NlcnREaWZmRWRnZSIsImJvdW5kcyIsImRpZmZFZGdlIiwidHdvVHdvIiwiYmluZCIsImZvdXJGb3VyIiwiYXNzZXJ0T3Bwb3NpbmdTaWRlIiwiaHlwIiwicmFkaWFucyIsImdldE9wcG9zaW5nU2lkZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdHJpZy50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuZ2xlLFxuICBlZGdlLFxuICBlZGdlcyxcbiAgbWF4RWRnZSxcbiAgbWluRWRnZSxcbiAgdG9SYWRpYW5zLFxuICB0b0RlZ3JlZXMsXG4gIGFjdXRlWEFuZ2xlLFxuICBhY3V0ZVlBbmdsZSxcbiAgZGlmZkVkZ2UsXG59IGZyb20gJy4uL3RyaWcnO1xuaW1wb3J0IHsgeHkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgZ2V0T3Bwb3NpbmdTaWRlIH0gZnJvbSAnLi4vdHJpZyc7XG5jb25zdCBsb2cgPSBkZWJ1ZygncGllLWxpYjpwbG90OnRyaWc6dGVzdCcpO1xuXG5jb25zdCB2cyA9ICh2KSA9PiB7XG4gIGlmICghdikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUodi54KSAmJiBOdW1iZXIuaXNGaW5pdGUodi55KSkge1xuICAgIHJldHVybiBgWyR7di54fSwke3YueX1dYDtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG59O1xuY29uc3QgcCA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcbiAgcmV0dXJuIHN0cmluZ3MucmVkdWNlKChhY2MsIHMsIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGAke2FjY30ke3N9JHt2cyh2YWx1ZXNbaW5kZXhdKX1gO1xuICB9LCAnJyk7XG59O1xuZGVzY3JpYmUoJ3RyaWcnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBbmdsZSA9IChhLCBiLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGAke2F9LCAke2J9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFuZ2xlKGEsIGIpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlQ2xvc2VUbyhleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDEsIDEpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMCwgMSksIHRvUmFkaWFucyg5MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgtMSwgMSksIHRvUmFkaWFucygxMzUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoLTEsIDApLCB0b1JhZGlhbnMoMTgwKSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KC0xLCAtMSksIHRvUmFkaWFucygyMjUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMCwgLTEpLCB0b1JhZGlhbnMoMjcwKSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDEsIC0xKSwgdG9SYWRpYW5zKDMxNSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDEsIDEpLCB4eSgwLCAwKSwgdG9SYWRpYW5zKDIyNSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAxKSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDIsIDEpLCB0b1JhZGlhbnMoMjYuNTY1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDMsIDEpLCB0b1JhZGlhbnMoMTguNDM0KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDQsIDEpLCB0b1JhZGlhbnMoMTQuMDM2KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDUsIDEpLCB0b1JhZGlhbnMoMTEuMzA5KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY3V0ZVhBbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBY3V0ZSA9IChpbnB1dCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke3RvRGVncmVlcyhpbnB1dCl9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFjdXRlWEFuZ2xlKGlucHV0KTtcbiAgICAgICAgbG9nKGByZXN1bHQ6ICR7dG9EZWdyZWVzKHJlc3VsdCl9YCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoNDUpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTAwKSwgdG9SYWRpYW5zKDgwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDE5MCksIHRvUmFkaWFucygxMCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygzNTApLCB0b1JhZGlhbnMoMTApKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FjdXRlWUFuZ2xlJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFjdXRlID0gKGlucHV0LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCR7dG9EZWdyZWVzKGlucHV0KX0gPT4gJHt0b0RlZ3JlZXMoZXhwZWN0ZWQpfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWN1dGVZQW5nbGUoaW5wdXQpO1xuICAgICAgICBsb2coYHJlc3VsdDogJHt0b0RlZ3JlZXMocmVzdWx0KX1gKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucyg0NSksIHRvUmFkaWFucyg0NSkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygxMDApLCB0b1JhZGlhbnMoMTApKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTkwKSwgdG9SYWRpYW5zKDgwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDM1MCksIHRvUmFkaWFucyg4MCkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWRnZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0RWRnZXMgPSAoZG9tYWluLCByYW5nZSkgPT4gKGZyb20sIHRvLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGAke2RvbWFpbn0sICR7cmFuZ2V9ICsgJHtmcm9tfSAtPiAke3RvfSA9PiAke2V4cGVjdGVkWzBdfSR7ZXhwZWN0ZWRbMV19YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBlZGdlcyhkb21haW4sIHJhbmdlKShmcm9tLCB0byk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMF0ueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMF0ueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMF0ueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMF0ueSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMV0ueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMV0ueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMV0ueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMV0ueSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lID0gYXNzZXJ0RWRnZXMoeyBtaW46IC00LCBtYXg6IDQgfSwgeyBtaW46IC00LCBtYXg6IDQgfSk7XG4gICAgb25lKHh5KDAsIDApLCB4eSgxLCAxKSwgW3h5KDQsIDQpLCB4eSgtNCwgLTQpXSk7XG4gICAgb25lKHh5KDAsIDApLCB4eSgyLCAxKSwgW3h5KDQsIDIpLCB4eSgtNCwgLTIpXSk7XG4gICAgb25lKHh5KDEsIDEpLCB4eSgyLCAyKSwgW3h5KDQsIDQpLCB4eSgtNCwgLTQpXSk7XG4gICAgb25lKHh5KDEsIDApLCB4eSgyLCAwKSwgW3h5KDQsIDApLCB4eSgtNCwgMCldKTtcbiAgICBvbmUoeHkoMSwgMCksIHh5KC0yLCAwKSwgW3h5KC00LCAwKSwgeHkoNCwgMCldKTtcblxuICAgIC8qKlxuICAgICAqIGRvbWFpbiB7bWluOiAtNSwgbWF4OiA1LCBwYWRkaW5nOiAwLCBzdGVwOiAxLCBsYWJlbFN0ZXA6IDF9bGFiZWxTdGVwOiAxbWF4OiA1bWluOiAtNXBhZGRpbmc6IDBzdGVwOiAxX19wcm90b19fOiBPYmplY3QgcmFuZ2U6ICB7bWluOiAtNSwgbWF4OiA1LCBwYWRkaW5nOiAwLCBzdGVwOiAxLCBsYWJlbFN0ZXA6IDF9IGE6IHt4OiAtNSwgeTogMH0gYjoge3g6IC01LCB5OiAyfSBlZGdlczogUG9pbnTCoHt4OiAtNSwgeTogNX0gUG9pbnTCoHt4OiAtNSwgeTogMn1cbiAgICAgKi9cbiAgICBjb25zdCBsaW5lSXNzdWUgPSBhc3NlcnRFZGdlcyh7IG1pbjogLTUsIG1heDogNSB9LCB7IG1pbjogLTUsIG1heDogNSB9KTtcbiAgICBsaW5lSXNzdWUoeHkoLTUsIC0wKSwgeHkoLTUsIDIpLCBbeHkoLTUsIDUpLCB4eSgtNSwgLTUpXSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkaWZmRWRnZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnREaWZmRWRnZSA9IChib3VuZHMsIGZyb20sIHRvLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGA8JHtib3VuZHN9PiAke2Zyb219IC0+ICR7dG99ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRWRnZShib3VuZHMsIGZyb20sIHRvKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC54KS50b0JlQ2xvc2VUbyhleHBlY3RlZC54KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC55KS50b0JlQ2xvc2VUbyhleHBlY3RlZC55KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0d29Ud28gPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KDIsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDEsIDEpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgxLCAyKSwgeHkoMSwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoMiwgMiksIHh5KDIsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDIsIDIpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgtMSwgMSksIHh5KC0yLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgtMSwgLTEpLCB4eSgtMiwgLTIpKTtcbiAgICBjb25zdCBmb3VyRm91ciA9IGFzc2VydERpZmZFZGdlLmJpbmQobnVsbCwgeHkoNCwgNCkpO1xuXG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDEsIDEpLCB4eSg0LCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDEsIDIpLCB4eSgyLCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDIsIDEpLCB4eSg0LCAyKSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KC0xLCAxKSwgeHkoLTQsIDQpKTtcbiAgICBmb3VyRm91cih4eSgwLCAwKSwgeHkoLTEsIDEpLCB4eSgtNCwgNCkpO1xuXG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIC00KSwgeHkoMCwgMCksIHh5KC0xLCAtMSksIHh5KC00LCAtNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KDQsIDQpLCB4eSgxLCAxKSwgeHkoMiwgMiksIHh5KDQsIDQpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg0LCA0KSwgeHkoMiwgMiksIHh5KDMsIDMpLCB4eSg0LCA0KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIC00KSwgeHkoLTEsIC0xKSwgeHkoLTIsIC0yKSwgeHkoLTQsIC00KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIDQpLCB4eSgtMSwgLTEpLCB4eSgtMiwgMCksIHh5KC00LCAyKSk7XG5cbiAgICBjb25zdCBsaW5lSXNzdWUgPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KC01LCAtNSkpO1xuXG4gICAgbGluZUlzc3VlKHh5KC01LCAyKSwgeHkoLTUsIDApLCB4eSgtNSwgLTUpKTtcbiAgICAvL1RvcCBSaWdodFxuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIDUpLCB4eSgwLCA1KSwgeHkoMiwgNSksIHh5KDUsIDUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCA1KSwgeHkoNSwgMCksIHh5KDUsIDEpLCB4eSg1LCA1KSk7XG5cbiAgICAvLyAvL0JvdHRvbSBSaWdodFxuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIC01KSwgeHkoNSwgMCksIHh5KDUsIC0wLjEpLCB4eSg1LCAtNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIC01KSwgeHkoMCwgLTUpLCB4eSgxLCAtNSksIHh5KDUsIC01KSk7XG5cbiAgICAvL1RvcCBMZWZ0XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIDUpLCB4eSgtNSwgMCksIHh5KC01LCAwLjEpLCB4eSgtNSwgNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCA1KSwgeHkoMCwgNSksIHh5KC0xLCA1KSwgeHkoLTUsIDUpKTtcblxuICAgIC8vQm90dG9tIExlZnRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSgtNSwgLTUpLCB4eSgtNSwgMCksIHh5KC01LCAtMC4xKSwgeHkoLTUsIC01KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIC01KSwgeHkoMCwgLTUpLCB4eSgtMSwgLTUpLCB4eSgtNSwgLTUpKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldE9wcG9zaW5nU2lkZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPcHBvc2luZ1NpZGUgPSAoaHlwLCBhbmdsZSwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke2h5cH0sICR7YW5nbGV9ID0gJHtleHBlY3RlZH1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhZGlhbnMgPSB0b1JhZGlhbnMoYW5nbGUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRPcHBvc2luZ1NpZGUoaHlwLCByYWRpYW5zKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydE9wcG9zaW5nU2lkZSgxLCA0NSwgMC43MDcpO1xuICAgIGFzc2VydE9wcG9zaW5nU2lkZSgxLjI1LCA0NSwgMC44OCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFZQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdB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R0FBRyxDQUFDLENBQUM7SUFDaERaLFdBQVcsQ0FBQyxJQUFBVyxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNqRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQyxlQUFTLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0NaLFdBQVcsQ0FBQyxJQUFBVyxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUMsZUFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDWixXQUFXLENBQUMsSUFBQVcsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNsRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxD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QUUsQ0FBQyxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFFLENBQUMsRUFBRTtNQUFFRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFFLENBQUMsQ0FBQztJQUNqRUYsR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7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QUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdENtQixNQUFNLENBQUMsSUFBQW5CLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTXFCLFFBQVEsR0FBR0wsY0FBYyxDQUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUFwQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXBEcUIsUUFBUSxDQUFDLElBQUFyQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0Q3FCLFFBQVEsQ0FBQyxJQUFBckIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdENxQixRQUFRLENBQUMsSUFBQXJCLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDcUIsUUFBUSxDQUFDLElBQUFyQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeENxQixRQUFRLENBQUMsSUFBQXJCLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV4Q2dCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOURnQixjQUFjLENBQUMsSUFBQWhCLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELElBQU1lLFNBQVMsR0FBR0MsY0FBYyxDQUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUFwQixTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RGUsU0FBUyxDQUFDLElBQUFmLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0M7SUFDQWdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFD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