@pie-lib/plot 2.7.4-next.0 → 2.9.0-beta.0

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.
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+
7
+ var _enzyme = require("enzyme");
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _root = require("../root");
12
+
13
+ var _d3Selection = require("d3-selection");
14
+
15
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
+
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+
19
+ var scaleMock = function scaleMock() {
20
+ var fn = jest.fn(function (n) {
21
+ return n;
22
+ });
23
+ fn.invert = jest.fn(function (n) {
24
+ return n;
25
+ });
26
+ return fn;
27
+ };
28
+
29
+ var graphProps = function graphProps() {
30
+ return {
31
+ scale: {
32
+ x: scaleMock(),
33
+ y: scaleMock()
34
+ },
35
+ snap: {
36
+ x: jest.fn(function (n) {
37
+ return n;
38
+ }),
39
+ y: jest.fn(function (n) {
40
+ return n;
41
+ })
42
+ },
43
+ domain: {
44
+ min: 0,
45
+ max: 1,
46
+ step: 1
47
+ },
48
+ range: {
49
+ min: 0,
50
+ max: 1,
51
+ step: 1
52
+ },
53
+ size: {
54
+ width: 400,
55
+ height: 400
56
+ }
57
+ };
58
+ };
59
+
60
+ var wrapper = function wrapper(props) {
61
+ props = _objectSpread({
62
+ classes: {},
63
+ graphProps: graphProps()
64
+ }, props);
65
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_root.Root, props, "hi"), {
66
+ disableLifecycleMethods: true
67
+ });
68
+ };
69
+
70
+ jest.mock('d3-selection', function () {
71
+ return {
72
+ select: jest.fn(),
73
+ mouse: jest.fn()
74
+ };
75
+ });
76
+ describe('root', function () {
77
+ describe('snapshot', function () {
78
+ it('matches', function () {
79
+ var w = wrapper();
80
+ expect(w).toMatchSnapshot();
81
+ });
82
+ });
83
+ describe('logic', function () {
84
+ describe('mousemove', function () {
85
+ describe('mount/unmount', function () {
86
+ it('adds mousemove listener on compenentDidMount', function () {
87
+ var w = wrapper();
88
+ var g = {
89
+ on: jest.fn()
90
+ };
91
+
92
+ _d3Selection.select.mockReturnValue(g);
93
+
94
+ w.instance().componentDidMount();
95
+ expect(g.on).toHaveBeenCalledWith('mousemove', expect.any(Function));
96
+ });
97
+ it('unsets mousemove listener on componentWillUnmount', function () {
98
+ var w = wrapper();
99
+ var g = {
100
+ on: jest.fn()
101
+ };
102
+
103
+ _d3Selection.select.mockReturnValue(g);
104
+
105
+ w.instance().componentWillUnmount();
106
+ expect(g.on).toHaveBeenCalledWith('mousemove', null);
107
+ });
108
+ });
109
+ describe('mouseMove function', function () {
110
+ var onMouseMove, w, gp;
111
+ beforeEach(function () {
112
+ onMouseMove = jest.fn();
113
+ gp = graphProps();
114
+ w = wrapper({
115
+ onMouseMove: onMouseMove,
116
+ graphProps: gp
117
+ });
118
+
119
+ _d3Selection.mouse.mockReturnValue([0, 0]);
120
+
121
+ var g = {
122
+ _groups: [[[0, 0]]]
123
+ };
124
+ w.instance().mouseMove(g);
125
+ });
126
+ it('calls mouse', function () {
127
+ expect(_d3Selection.mouse).toHaveBeenCalledWith([0, 0]);
128
+ });
129
+ it('calls, scale.x.invert', function () {
130
+ expect(gp.scale.x.invert).toHaveBeenCalledWith(0);
131
+ });
132
+ it('calls, scale.y.invert', function () {
133
+ expect(gp.scale.y.invert).toHaveBeenCalledWith(0);
134
+ });
135
+ it('calls, snap.x', function () {
136
+ expect(gp.snap.x).toHaveBeenCalledWith(0);
137
+ });
138
+ it('calls, snap.y', function () {
139
+ expect(gp.snap.y).toHaveBeenCalledWith(0);
140
+ });
141
+ it('calls handler', function () {
142
+ expect(onMouseMove).toHaveBeenCalledWith({
143
+ x: 0,
144
+ y: 0
145
+ });
146
+ });
147
+ });
148
+ });
149
+ });
150
+ });
151
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcm9vdC50ZXN0LmpzeCJdLCJuYW1lcyI6WyJzY2FsZU1vY2siLCJmbiIsImplc3QiLCJuIiwiaW52ZXJ0IiwiZ3JhcGhQcm9wcyIsInNjYWxlIiwieCIsInkiLCJzbmFwIiwiZG9tYWluIiwibWluIiwibWF4Iiwic3RlcCIsInJhbmdlIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwid3JhcHBlciIsInByb3BzIiwiY2xhc3NlcyIsImRpc2FibGVMaWZlY3ljbGVNZXRob2RzIiwibW9jayIsInNlbGVjdCIsIm1vdXNlIiwiZGVzY3JpYmUiLCJpdCIsInciLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJnIiwib24iLCJtb2NrUmV0dXJuVmFsdWUiLCJpbnN0YW5jZSIsImNvbXBvbmVudERpZE1vdW50IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhbnkiLCJGdW5jdGlvbiIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib25Nb3VzZU1vdmUiLCJncCIsImJlZm9yZUVhY2giLCJfZ3JvdXBzIiwibW91c2VNb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsU0FBUyxHQUFHLFNBQVpBLFNBQVksR0FBTTtBQUN0QixNQUFNQyxFQUFFLEdBQUdDLElBQUksQ0FBQ0QsRUFBTCxDQUFRLFVBQUNFLENBQUQ7QUFBQSxXQUFPQSxDQUFQO0FBQUEsR0FBUixDQUFYO0FBQ0FGLEVBQUFBLEVBQUUsQ0FBQ0csTUFBSCxHQUFZRixJQUFJLENBQUNELEVBQUwsQ0FBUSxVQUFDRSxDQUFEO0FBQUEsV0FBT0EsQ0FBUDtBQUFBLEdBQVIsQ0FBWjtBQUNBLFNBQU9GLEVBQVA7QUFDRCxDQUpEOztBQU1BLElBQU1JLFVBQVUsR0FBRyxTQUFiQSxVQUFhO0FBQUEsU0FBTztBQUN4QkMsSUFBQUEsS0FBSyxFQUFFO0FBQ0xDLE1BQUFBLENBQUMsRUFBRVAsU0FBUyxFQURQO0FBRUxR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QUFaLENBQU4sQ0FBMEIrQixvQkFBMUIsQ0FBK0MsQ0FBL0M7QUFDRCxTQUZDLENBQUY7QUFHQVQsUUFBQUEsRUFBRSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDaENFLFVBQUFBLE1BQU0sQ0FBQ1ksRUFBRSxDQUFDbEMsS0FBSCxDQUFTRSxDQUFULENBQVdKLE1BQVosQ0FBTixDQUEwQitCLG9CQUExQixDQUErQyxDQUEvQztBQUNELFNBRkMsQ0FBRjtBQUdBVCxRQUFBQSxFQUFFLENBQUMsZUFBRCxFQUFrQixZQUFNO0FBQ3hCRSxVQUFBQSxNQUFNLENBQUNZLEVBQUUsQ0FBQy9CLElBQUgsQ0FBUUYsQ0FBVCxDQUFOLENBQWtCNEIsb0JBQWxCLENBQXVDLENBQXZDO0FBQ0QsU0FGQyxDQUFGO0FBR0FULFFBQUFBLEVBQUUsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDeEJFLFVBQUFBLE1BQU0sQ0FBQ1ksRUFBRSxDQUFDL0IsSUFBSCxDQUFRRCxDQUFULENBQU4sQ0FBa0IyQixvQkFBbEIsQ0FBdUMsQ0FBdkM7QUFDRCxTQUZDLENBQUY7QUFJQVQsUUFBQUEsRUFBRSxDQUFDLGVBQUQsRUFBa0IsWUFBTTtBQUN4QkUsVUFBQUEsTUFBTSxDQUFDVyxXQUFELENBQU4sQ0FBb0JKLG9CQUFwQixDQUF5QztBQUFFNUIsWUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsWUFBQUEsQ0FBQyxFQUFFO0FBQVgsV0FBekM7QUFDRCxTQUZDLENBQUY7QUFHRCxPQWhDTyxDQUFSO0FBaUNELEtBdkRPLENBQVI7QUF3REQsR0F6RE8sQ0FBUjtBQTBERCxDQWxFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm9vdCB9IGZyb20gJy4uL3Jvb3QnO1xuaW1wb3J0IHsgc2VsZWN0LCBtb3VzZSB9IGZyb20gJ2QzLXNlbGVjdGlvbic7XG5cbmNvbnN0IHNjYWxlTW9jayA9ICgpID0+IHtcbiAgY29uc3QgZm4gPSBqZXN0LmZuKChuKSA9PiBuKTtcbiAgZm4uaW52ZXJ0ID0gamVzdC5mbigobikgPT4gbik7XG4gIHJldHVybiBmbjtcbn07XG5cbmNvbnN0IGdyYXBoUHJvcHMgPSAoKSA9PiAoe1xuICBzY2FsZToge1xuICAgIHg6IHNjYWxlTW9jaygpLFxuICAgIHk6IHNjYWxlTW9jaygpLFxuICB9LFxuICBzbmFwOiB7XG4gICAgeDogamVzdC5mbigobikgPT4gbiksXG4gICAgeTogamVzdC5mbigobikgPT4gbiksXG4gIH0sXG4gIGRvbWFpbjoge1xuICAgIG1pbjogMCxcbiAgICBtYXg6IDEsXG4gICAgc3RlcDogMSxcbiAgfSxcbiAgcmFuZ2U6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAxLFxuICAgIHN0ZXA6IDEsXG4gIH0sXG4gIHNpemU6IHtcbiAgICB3aWR0aDogNDAwLFxuICAgIGhlaWdodDogNDAwLFxuICB9LFxufSk7XG5cbmNvbnN0IHdyYXBwZXIgPSAocHJvcHMpID0+IHtcbiAgcHJvcHMgPSB7XG4gICAgY2xhc3Nlczoge30sXG4gICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIC4uLnByb3BzLFxuICB9O1xuXG4gIHJldHVybiBzaGFsbG93KDxSb290IHsuLi5wcm9wc30+aGk8L1Jvb3Q+LCB7IGRpc2FibGVMaWZlY3ljbGVNZXRob2RzOiB0cnVlIH0pO1xufTtcblxuamVzdC5tb2NrKCdkMy1zZWxlY3Rpb24nLCAoKSA9PiAoe1xuICBzZWxlY3Q6IGplc3QuZm4oKSxcbiAgbW91c2U6IGplc3QuZm4oKSxcbn0pKTtcblxuZGVzY3JpYmUoJ3Jvb3QnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgnbWF0Y2hlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW91c2Vtb3ZlJywgKCkgPT4ge1xuICAgICAgZGVzY3JpYmUoJ21vdW50L3VubW91bnQnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdhZGRzIG1vdXNlbW92ZSBsaXN0ZW5lciBvbiBjb21wZW5lbnREaWRNb3VudCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuICAgICAgICAgIGNvbnN0IGcgPSB7XG4gICAgICAgICAgICBvbjogamVzdC5mbigpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2VsZWN0Lm1vY2tSZXR1cm5WYWx1ZShnKTtcbiAgICAgICAgICB3Lmluc3RhbmNlKCkuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICBleHBlY3QoZy5vbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ21vdXNlbW92ZScsIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCd1bnNldHMgbW91c2Vtb3ZlIGxpc3RlbmVyIG9uIGNvbXBvbmVudFdpbGxVbm1vdW50JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgICAgIG9uOiBqZXN0LmZuKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKGcpO1xuICAgICAgICAgIHcuaW5zdGFuY2UoKS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIGV4cGVjdChnLm9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnbW91c2Vtb3ZlJywgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdtb3VzZU1vdmUgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGxldCBvbk1vdXNlTW92ZSwgdywgZ3A7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIG9uTW91c2VNb3ZlID0gamVzdC5mbigpO1xuICAgICAgICAgIGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIHcgPSB3cmFwcGVyKHtcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbW91c2UubW9ja1JldHVyblZhbHVlKFswLCAwXSk7XG4gICAgICAgICAgY29uc3QgZyA9IHsgX2dyb3VwczogW1tbMCwgMF1dXSB9O1xuICAgICAgICAgIHcuaW5zdGFuY2UoKS5tb3VzZU1vdmUoZyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY2FsbHMgbW91c2UnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG1vdXNlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMCwgMF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzY2FsZS54LmludmVydCcsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc2NhbGUueC5pbnZlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzY2FsZS55LmludmVydCcsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc2NhbGUueS5pbnZlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ2NhbGxzLCBzbmFwLngnLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KGdwLnNuYXAueCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnY2FsbHMsIHNuYXAueScsICgpID0+IHtcbiAgICAgICAgICBleHBlY3QoZ3Auc25hcC55KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NhbGxzIGhhbmRsZXInLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG9uTW91c2VNb3ZlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
6
+
7
+ var _trig = require("../trig");
8
+
9
+ var _utils = require("../utils");
10
+
11
+ var _debug = _interopRequireDefault(require("debug"));
12
+
13
+ var _templateObject, _templateObject2, _templateObject3;
14
+
15
+ var log = (0, _debug["default"])('pie-lib:plot:trig:test');
16
+
17
+ var vs = function vs(v) {
18
+ if (!v) {
19
+ return '';
20
+ }
21
+
22
+ if (Number.isFinite(v.x) && Number.isFinite(v.y)) {
23
+ return "[".concat(v.x, ",").concat(v.y, "]");
24
+ }
25
+
26
+ return JSON.stringify(v);
27
+ };
28
+
29
+ var p = function p(strings) {
30
+ for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
31
+ values[_key - 1] = arguments[_key];
32
+ }
33
+
34
+ return strings.reduce(function (acc, s, index) {
35
+ return "".concat(acc).concat(s).concat(vs(values[index]));
36
+ }, '');
37
+ };
38
+
39
+ describe('trig', function () {
40
+ describe('angle', function () {
41
+ var assertAngle = function assertAngle(a, b, expected) {
42
+ it(p(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["", ", ", " => ", ""])), a, b, (0, _trig.toDegrees)(expected)), function () {
43
+ var result = (0, _trig.angle)(a, b);
44
+ expect(result).toBeCloseTo(expected);
45
+ });
46
+ };
47
+
48
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
49
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1), (0, _trig.toRadians)(90));
50
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _trig.toRadians)(135));
51
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 0), (0, _trig.toRadians)(180));
52
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _trig.toRadians)(225));
53
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, -1), (0, _trig.toRadians)(270));
54
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, -1), (0, _trig.toRadians)(315));
55
+ assertAngle((0, _utils.xy)(1, 1), (0, _utils.xy)(0, 0), (0, _trig.toRadians)(225));
56
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
57
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _trig.toRadians)(26.565));
58
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(3, 1), (0, _trig.toRadians)(18.434));
59
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(4, 1), (0, _trig.toRadians)(14.036));
60
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(5, 1), (0, _trig.toRadians)(11.309));
61
+ });
62
+ describe('acuteXAngle', 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.acuteXAngle)(input);
66
+ log("result: ".concat((0, _trig.toDegrees)(result)));
67
+ expect(result).toBeCloseTo(expected);
68
+ });
69
+ };
70
+
71
+ assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
72
+ assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(80));
73
+ assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(10));
74
+ assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(10));
75
+ });
76
+ describe('acuteYAngle', function () {
77
+ var assertAcute = function assertAcute(input, expected) {
78
+ it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
79
+ var result = (0, _trig.acuteYAngle)(input);
80
+ log("result: ".concat((0, _trig.toDegrees)(result)));
81
+ expect(result).toBeCloseTo(expected);
82
+ });
83
+ };
84
+
85
+ assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
86
+ assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(10));
87
+ assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(80));
88
+ assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(80));
89
+ });
90
+ describe('edges', function () {
91
+ var assertEdges = function assertEdges(domain, range) {
92
+ return function (from, to, expected) {
93
+ it(p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["", ", ", " + ", " -> ", " => ", "", ""])), domain, range, from, to, expected[0], expected[1]), function () {
94
+ var result = (0, _trig.edges)(domain, range)(from, to);
95
+ expect(result[0].x).toBeCloseTo(expected[0].x);
96
+ expect(result[0].y).toBeCloseTo(expected[0].y);
97
+ expect(result[1].x).toBeCloseTo(expected[1].x);
98
+ expect(result[1].y).toBeCloseTo(expected[1].y);
99
+ });
100
+ };
101
+ };
102
+
103
+ var one = assertEdges({
104
+ min: -4,
105
+ max: 4
106
+ }, {
107
+ min: -4,
108
+ max: 4
109
+ });
110
+ one((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
111
+ one((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), [(0, _utils.xy)(4, 2), (0, _utils.xy)(-4, -2)]);
112
+ one((0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
113
+ one((0, _utils.xy)(1, 0), (0, _utils.xy)(2, 0), [(0, _utils.xy)(4, 0), (0, _utils.xy)(-4, 0)]);
114
+ one((0, _utils.xy)(1, 0), (0, _utils.xy)(-2, 0), [(0, _utils.xy)(-4, 0), (0, _utils.xy)(4, 0)]);
115
+ /**
116
+ * 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}
117
+ */
118
+
119
+ var lineIssue = assertEdges({
120
+ min: -5,
121
+ max: 5
122
+ }, {
123
+ min: -5,
124
+ max: 5
125
+ });
126
+ lineIssue((0, _utils.xy)(-5, -0), (0, _utils.xy)(-5, 2), [(0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, -5)]);
127
+ });
128
+ describe('diffEdge', function () {
129
+ var assertDiffEdge = function assertDiffEdge(bounds, from, to, expected) {
130
+ it(p(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["<", "> ", " -> ", " => ", ""])), bounds, from, to, expected), function () {
131
+ var result = (0, _trig.diffEdge)(bounds, from, to);
132
+ expect(result.x).toBeCloseTo(expected.x);
133
+ expect(result.y).toBeCloseTo(expected.y);
134
+ });
135
+ };
136
+
137
+ var twoTwo = assertDiffEdge.bind(null, (0, _utils.xy)(2, 2));
138
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
139
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(1, 2));
140
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
141
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
142
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-2, 2));
143
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2));
144
+ var fourFour = assertDiffEdge.bind(null, (0, _utils.xy)(4, 4));
145
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(4, 4));
146
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(2, 4));
147
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _utils.xy)(4, 2));
148
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
149
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
150
+ assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-4, -4));
151
+ assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(4, 4));
152
+ assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3), (0, _utils.xy)(4, 4));
153
+ assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2), (0, _utils.xy)(-4, -4));
154
+ assertDiffEdge((0, _utils.xy)(-4, 4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, 0), (0, _utils.xy)(-4, 2));
155
+ var lineIssue = assertDiffEdge.bind(null, (0, _utils.xy)(-5, -5));
156
+ lineIssue((0, _utils.xy)(-5, 2), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -5)); //Top Right
157
+
158
+ assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(2, 5), (0, _utils.xy)(5, 5));
159
+ assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, 1), (0, _utils.xy)(5, 5)); // //Bottom Right
160
+
161
+ assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, -0.1), (0, _utils.xy)(5, -5));
162
+ assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(1, -5), (0, _utils.xy)(5, -5)); //Top Left
163
+
164
+ assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, 0.1), (0, _utils.xy)(-5, 5));
165
+ assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(-1, 5), (0, _utils.xy)(-5, 5)); //Bottom Left
166
+
167
+ assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -0.1), (0, _utils.xy)(-5, -5));
168
+ assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(-1, -5), (0, _utils.xy)(-5, -5));
169
+ });
170
+ describe('getOpposingSide', function () {
171
+ var assertOpposingSide = function assertOpposingSide(hyp, angle, expected) {
172
+ it("".concat(hyp, ", ").concat(angle, " = ").concat(expected), function () {
173
+ var radians = (0, _trig.toRadians)(angle);
174
+ var result = (0, _trig.getOpposingSide)(hyp, radians);
175
+ expect(result).toBeCloseTo(expected);
176
+ });
177
+ };
178
+
179
+ assertOpposingSide(1, 45, 0.707);
180
+ assertOpposingSide(1.25, 45, 0.88);
181
+ });
182
+ });
183
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdHJpZy50ZXN0LmpzIl0sIm5hbWVzIjpbImxvZyIsInZzIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwieCIsInkiLCJKU09OIiwic3RyaW5naWZ5IiwicCIsInN0cmluZ3MiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJhY2MiLCJzIiwiaW5kZXgiLCJkZXNjcmliZSIsImFzc2VydEFuZ2xlIiwiYSIsImIiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9CZUNsb3NlVG8iLCJhc3NlcnRBY3V0ZSIsImlucHV0IiwiYXNzZXJ0RWRnZXMiLCJkb21haW4iLCJyYW5nZSIsImZyb20iLCJ0byIsIm9uZSIsIm1pbiIsIm1heCIsImxpbmVJc3N1ZSIsImFzc2VydERpZmZFZGdlIiwiYm91bmRzIiwidHdvVHdvIiwiYmluZCIsImZvdXJGb3VyIiwiYXNzZXJ0T3Bwb3NpbmdTaWRlIiwiaHlwIiwiYW5nbGUiLCJyYWRpYW5zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFZQTs7QUFDQTs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSx3QkFBTixDQUFaOztBQUVBLElBQU1DLEVBQUUsR0FBRyxTQUFMQSxFQUFLLENBQUNDLENBQUQsRUFBTztBQUNoQixNQUFJLENBQUNBLENBQUwsRUFBUTtBQUNOLFdBQU8sRUFBUDtBQUNEOztBQUVELE1BQUlDLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkYsQ0FBQyxDQUFDRyxDQUFsQixLQUF3QkYsTUFBTSxDQUFDQyxRQUFQLENBQWdCRixDQUFDLENBQUNJLENBQWxCLENBQTVCLEVBQWtEO0FBQ2hELHNCQUFXSixDQUFDLENBQUNHLENBQWIsY0FBa0JILENBQUMsQ0FBQ0ksQ0FBcEI7QUFDRDs7QUFDRCxTQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sQ0FBZixDQUFQO0FBQ0QsQ0FURDs7QUFVQSxJQUFNTyxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDQyxPQUFELEVBQXdC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USxDQUFDLGlCQUFELEVBQW9CLFlBQU07QUFDaEMsUUFBTXlCLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWF2QixRQUFiLEVBQTBCO0FBQ25EQyxNQUFBQSxFQUFFLFdBQUlxQixHQUFKLGVBQVlDLEtBQVosZ0JBQXVCdkIsUUFBdkIsR0FBbUMsWUFBTTtBQUN6QyxZQUFNd0IsT0FBTyxHQUFHLHFCQUFVRCxLQUFWLENBQWhCO0FBQ0EsWUFBTXJCLE1BQU0sR0FBRywyQkFBZ0JvQixHQUFoQixFQUFxQkUsT0FBckIsQ0FBZjtBQUNBckIsUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsV0FBZixDQUEyQkosUUFBM0I7QUFDRCxPQUpDLENBQUY7QUFLRCxLQU5EOztBQVFBcUIsSUFBQUEsa0JBQWtCLENBQUMsQ0FBRCxFQUFJLEVBQUosRUFBUSxLQUFSLENBQWxCO0FBQ0FBLElBQUFBLGtCQUFrQixDQUFDLElBQUQsRUFBTyxFQUFQLEVBQVcsSUFBWCxDQUFsQjtBQUNELEdBWE8sQ0FBUjtBQVlELENBN0lPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbmdsZSxcbiAgZWRnZSxcbiAgZWRnZXMsXG4gIG1heEVkZ2UsXG4gIG1pbkVkZ2UsXG4gIHRvUmFkaWFucyxcbiAgdG9EZWdyZWVzLFxuICBhY3V0ZVhBbmdsZSxcbiAgYWN1dGVZQW5nbGUsXG4gIGRpZmZFZGdlLFxufSBmcm9tICcuLi90cmlnJztcbmltcG9ydCB7IHh5IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IGdldE9wcG9zaW5nU2lkZSB9IGZyb20gJy4uL3RyaWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ3BpZS1saWI6cGxvdDp0cmlnOnRlc3QnKTtcblxuY29uc3QgdnMgPSAodikgPT4ge1xuICBpZiAoIXYpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHYueCkgJiYgTnVtYmVyLmlzRmluaXRlKHYueSkpIHtcbiAgICByZXR1cm4gYFske3YueH0sJHt2Lnl9XWA7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xufTtcbmNvbnN0IHAgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG4gIHJldHVybiBzdHJpbmdzLnJlZHVjZSgoYWNjLCBzLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBgJHthY2N9JHtzfSR7dnModmFsdWVzW2luZGV4XSl9YDtcbiAgfSwgJycpO1xufTtcbmRlc2NyaWJlKCd0cmlnJywgKCkgPT4ge1xuICBkZXNjcmliZSgnYW5nbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QW5nbGUgPSAoYSwgYiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgJHthfSwgJHtifSA9PiAke3RvRGVncmVlcyhleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhbmdsZShhLCBiKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAxKSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDAsIDEpLCB0b1JhZGlhbnMoOTApKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoLTEsIDEpLCB0b1JhZGlhbnMoMTM1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KC0xLCAwKSwgdG9SYWRpYW5zKDE4MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgtMSwgLTEpLCB0b1JhZGlhbnMoMjI1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDAsIC0xKSwgdG9SYWRpYW5zKDI3MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAtMSksIHRvUmFkaWFucygzMTUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgxLCAxKSwgeHkoMCwgMCksIHRvUmFkaWFucygyMjUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMSwgMSksIHRvUmFkaWFucyg0NSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgyLCAxKSwgdG9SYWRpYW5zKDI2LjU2NSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgzLCAxKSwgdG9SYWRpYW5zKDE4LjQzNCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSg0LCAxKSwgdG9SYWRpYW5zKDE0LjAzNikpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSg1LCAxKSwgdG9SYWRpYW5zKDExLjMwOSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWN1dGVYQW5nbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QWN1dGUgPSAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJHt0b0RlZ3JlZXMoaW5wdXQpfSA9PiAke3RvRGVncmVlcyhleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhY3V0ZVhBbmdsZShpbnB1dCk7XG4gICAgICAgIGxvZyhgcmVzdWx0OiAke3RvRGVncmVlcyhyZXN1bHQpfWApO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlQ2xvc2VUbyhleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDQ1KSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDEwMCksIHRvUmFkaWFucyg4MCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygxOTApLCB0b1JhZGlhbnMoMTApKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMzUwKSwgdG9SYWRpYW5zKDEwKSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY3V0ZVlBbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBY3V0ZSA9IChpbnB1dCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke3RvRGVncmVlcyhpbnB1dCl9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFjdXRlWUFuZ2xlKGlucHV0KTtcbiAgICAgICAgbG9nKGByZXN1bHQ6ICR7dG9EZWdyZWVzKHJlc3VsdCl9YCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoNDUpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTAwKSwgdG9SYWRpYW5zKDEwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDE5MCksIHRvUmFkaWFucyg4MCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygzNTApLCB0b1JhZGlhbnMoODApKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VkZ2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEVkZ2VzID0gKGRvbWFpbiwgcmFuZ2UpID0+IChmcm9tLCB0bywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgJHtkb21haW59LCAke3JhbmdlfSArICR7ZnJvbX0gLT4gJHt0b30gPT4gJHtleHBlY3RlZFswXX0ke2V4cGVjdGVkWzFdfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZWRnZXMoZG9tYWluLCByYW5nZSkoZnJvbSwgdG8pO1xuICAgICAgICBleHBlY3QocmVzdWx0WzBdLngpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzBdLngpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzBdLnkpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzBdLnkpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzFdLngpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzFdLngpO1xuICAgICAgICBleHBlY3QocmVzdWx0WzFdLnkpLnRvQmVDbG9zZVRvKGV4cGVjdGVkWzFdLnkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uZSA9IGFzc2VydEVkZ2VzKHsgbWluOiAtNCwgbWF4OiA0IH0sIHsgbWluOiAtNCwgbWF4OiA0IH0pO1xuICAgIG9uZSh4eSgwLCAwKSwgeHkoMSwgMSksIFt4eSg0LCA0KSwgeHkoLTQsIC00KV0pO1xuICAgIG9uZSh4eSgwLCAwKSwgeHkoMiwgMSksIFt4eSg0LCAyKSwgeHkoLTQsIC0yKV0pO1xuICAgIG9uZSh4eSgxLCAxKSwgeHkoMiwgMiksIFt4eSg0LCA0KSwgeHkoLTQsIC00KV0pO1xuICAgIG9uZSh4eSgxLCAwKSwgeHkoMiwgMCksIFt4eSg0LCAwKSwgeHkoLTQsIDApXSk7XG4gICAgb25lKHh5KDEsIDApLCB4eSgtMiwgMCksIFt4eSgtNCwgMCksIHh5KDQsIDApXSk7XG5cbiAgICAvKipcbiAgICAgKiBkb21haW4ge21pbjogLTUsIG1heDogNSwgcGFkZGluZzogMCwgc3RlcDogMSwgbGFiZWxTdGVwOiAxfWxhYmVsU3RlcDogMW1heDogNW1pbjogLTVwYWRkaW5nOiAwc3RlcDogMV9fcHJvdG9fXzogT2JqZWN0IHJhbmdlOiAge21pbjogLTUsIG1heDogNSwgcGFkZGluZzogMCwgc3RlcDogMSwgbGFiZWxTdGVwOiAxfSBhOiB7eDogLTUsIHk6IDB9IGI6IHt4OiAtNSwgeTogMn0gZWRnZXM6IFBvaW50wqB7eDogLTUsIHk6IDV9IFBvaW50wqB7eDogLTUsIHk6IDJ9XG4gICAgICovXG4gICAgY29uc3QgbGluZUlzc3VlID0gYXNzZXJ0RWRnZXMoeyBtaW46IC01LCBtYXg6IDUgfSwgeyBtaW46IC01LCBtYXg6IDUgfSk7XG4gICAgbGluZUlzc3VlKHh5KC01LCAtMCksIHh5KC01LCAyKSwgW3h5KC01LCA1KSwgeHkoLTUsIC01KV0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGlmZkVkZ2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0RGlmZkVkZ2UgPSAoYm91bmRzLCBmcm9tLCB0bywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KHBgPCR7Ym91bmRzfT4gJHtmcm9tfSAtPiAke3RvfSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkVkZ2UoYm91bmRzLCBmcm9tLCB0byk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWQueSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdHdvVHdvID0gYXNzZXJ0RGlmZkVkZ2UuYmluZChudWxsLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgxLCAxKSwgeHkoMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoMSwgMiksIHh5KDEsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDIsIDIpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgyLCAyKSwgeHkoMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoLTEsIDEpLCB4eSgtMiwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoLTEsIC0xKSwgeHkoLTIsIC0yKSk7XG4gICAgY29uc3QgZm91ckZvdXIgPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KDQsIDQpKTtcblxuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgxLCAxKSwgeHkoNCwgNCkpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgxLCAyKSwgeHkoMiwgNCkpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgyLCAxKSwgeHkoNCwgMikpO1xuICAgIGZvdXJGb3VyKHh5KDAsIDApLCB4eSgtMSwgMSksIHh5KC00LCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KC0xLCAxKSwgeHkoLTQsIDQpKTtcblxuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCAtNCksIHh5KDAsIDApLCB4eSgtMSwgLTEpLCB4eSgtNCwgLTQpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg0LCA0KSwgeHkoMSwgMSksIHh5KDIsIDIpLCB4eSg0LCA0KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoNCwgNCksIHh5KDIsIDIpLCB4eSgzLCAzKSwgeHkoNCwgNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCAtNCksIHh5KC0xLCAtMSksIHh5KC0yLCAtMiksIHh5KC00LCAtNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC00LCA0KSwgeHkoLTEsIC0xKSwgeHkoLTIsIDApLCB4eSgtNCwgMikpO1xuXG4gICAgY29uc3QgbGluZUlzc3VlID0gYXNzZXJ0RGlmZkVkZ2UuYmluZChudWxsLCB4eSgtNSwgLTUpKTtcblxuICAgIGxpbmVJc3N1ZSh4eSgtNSwgMiksIHh5KC01LCAwKSwgeHkoLTUsIC01KSk7XG4gICAgLy9Ub3AgUmlnaHRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCA1KSwgeHkoMCwgNSksIHh5KDIsIDUpLCB4eSg1LCA1KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoNSwgNSksIHh5KDUsIDApLCB4eSg1LCAxKSwgeHkoNSwgNSkpO1xuXG4gICAgLy8gLy9Cb3R0b20gUmlnaHRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCAtNSksIHh5KDUsIDApLCB4eSg1LCAtMC4xKSwgeHkoNSwgLTUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCAtNSksIHh5KDAsIC01KSwgeHkoMSwgLTUpLCB4eSg1LCAtNSkpO1xuXG4gICAgLy9Ub3AgTGVmdFxuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCA1KSwgeHkoLTUsIDApLCB4eSgtNSwgMC4xKSwgeHkoLTUsIDUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSgtNSwgNSksIHh5KDAsIDUpLCB4eSgtMSwgNSksIHh5KC01LCA1KSk7XG5cbiAgICAvL0JvdHRvbSBMZWZ0XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIC01KSwgeHkoLTUsIDApLCB4eSgtNSwgLTAuMSksIHh5KC01LCAtNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCAtNSksIHh5KDAsIC01KSwgeHkoLTEsIC01KSwgeHkoLTUsIC01KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRPcHBvc2luZ1NpZGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3Bwb3NpbmdTaWRlID0gKGh5cCwgYW5nbGUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJHtoeXB9LCAke2FuZ2xlfSA9ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByYWRpYW5zID0gdG9SYWRpYW5zKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0T3Bwb3NpbmdTaWRlKGh5cCwgcmFkaWFucyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRPcHBvc2luZ1NpZGUoMSwgNDUsIDAuNzA3KTtcbiAgICBhc3NlcnRPcHBvc2luZ1NpZGUoMS4yNSwgNDUsIDAuODgpO1xuICB9KTtcbn0pO1xuIl19