react-pivottable-plus 1.0.10 → 1.0.12
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.
- package/{PivotTable.js → dist/PivotTable.js} +0 -1
- package/dist/PivotTable.js.map +1 -0
- package/dist/PivotTableUI.js.map +1 -0
- package/{PlotlyRenderers.js → dist/PlotlyRenderers.js} +0 -1
- package/dist/PlotlyRenderers.js.map +1 -0
- package/dist/SubtotalRenderers.js +1372 -0
- package/dist/SubtotalRenderers.js.map +1 -0
- package/{TableRenderers.js → dist/TableRenderers.js} +0 -1
- package/dist/TableRenderers.js.map +1 -0
- package/dist/Utilities.js.map +1 -0
- package/dist/__tests__/PivotTableUI-test.js +177 -0
- package/dist/__tests__/PivotTableUI-test.js.map +1 -0
- package/dist/__tests__/Utilities-test.js +366 -0
- package/dist/__tests__/Utilities-test.js.map +1 -0
- package/dist/hooks/usePivot.js.map +1 -0
- package/dist/renderers/RadixUI.js.map +1 -0
- package/dist/renderers/ShadcnDashboardUI.js.map +1 -0
- package/dist/renderers/TailwindUI.js.map +1 -0
- package/package.json +18 -19
- package/PivotTable.js.map +0 -1
- package/PivotTableUI.js.map +0 -1
- package/PlotlyRenderers.js.map +0 -1
- package/TableRenderers.js.map +0 -1
- package/Utilities.js.map +0 -1
- package/hooks/usePivot.js.map +0 -1
- package/renderers/RadixUI.js.map +0 -1
- package/renderers/ShadcnDashboardUI.js.map +0 -1
- package/renderers/TailwindUI.js.map +0 -1
- /package/{PivotTableUI.js → dist/PivotTableUI.js} +0 -0
- /package/{Utilities.js → dist/Utilities.js} +0 -0
- /package/{hooks → dist/hooks}/usePivot.js +0 -0
- /package/{renderers → dist/renderers}/RadixUI.js +0 -0
- /package/{renderers → dist/renderers}/ShadcnDashboardUI.js +0 -0
- /package/{renderers → dist/renderers}/TailwindUI.js +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _PivotTableUI = _interopRequireDefault(require("../PivotTableUI"));
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
6
|
+
describe('PivotTableUI', function () {
|
|
7
|
+
describe('handleDuplicates', function () {
|
|
8
|
+
// Create a minimal instance of PivotTableUI for testing
|
|
9
|
+
var getInstance = function getInstance() {
|
|
10
|
+
var pivotTableUI = new _PivotTableUI["default"]({
|
|
11
|
+
onChange: function onChange() {},
|
|
12
|
+
renderers: {},
|
|
13
|
+
aggregators: {},
|
|
14
|
+
rows: [],
|
|
15
|
+
cols: [],
|
|
16
|
+
rendererName: '',
|
|
17
|
+
aggregatorName: '',
|
|
18
|
+
vals: [],
|
|
19
|
+
valueFilter: {},
|
|
20
|
+
rowOrder: 'key_a_to_z',
|
|
21
|
+
colOrder: 'key_a_to_z',
|
|
22
|
+
derivedAttributes: {},
|
|
23
|
+
data: []
|
|
24
|
+
});
|
|
25
|
+
return pivotTableUI;
|
|
26
|
+
};
|
|
27
|
+
it('returns existingAttributes when newAttributes is null or undefined', function () {
|
|
28
|
+
var instance = getInstance();
|
|
29
|
+
expect(instance.handleDuplicates(null, ['a', 'b'])).toEqual(['a', 'b']);
|
|
30
|
+
expect(instance.handleDuplicates(undefined, ['a', 'b'])).toEqual(['a', 'b']);
|
|
31
|
+
});
|
|
32
|
+
it('returns empty array when both inputs are null or undefined', function () {
|
|
33
|
+
var instance = getInstance();
|
|
34
|
+
expect(instance.handleDuplicates(null, null)).toEqual([]);
|
|
35
|
+
expect(instance.handleDuplicates(undefined, undefined)).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
it('returns existingAttributes when there are no duplicates', function () {
|
|
38
|
+
var instance = getInstance();
|
|
39
|
+
var newAttributes = ['a', 'b', 'c'];
|
|
40
|
+
var existingAttributes = ['d', 'e', 'f'];
|
|
41
|
+
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(existingAttributes);
|
|
42
|
+
});
|
|
43
|
+
it('removes duplicates from existingAttributes', function () {
|
|
44
|
+
var instance = getInstance();
|
|
45
|
+
var newAttributes = ['a', 'b', 'c'];
|
|
46
|
+
var existingAttributes = ['b', 'c', 'd'];
|
|
47
|
+
// 'b' and 'c' are duplicates and should be removed
|
|
48
|
+
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(['d']);
|
|
49
|
+
});
|
|
50
|
+
it('handles empty newAttributes', function () {
|
|
51
|
+
var instance = getInstance();
|
|
52
|
+
var newAttributes = [];
|
|
53
|
+
var existingAttributes = ['a', 'b', 'c'];
|
|
54
|
+
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(existingAttributes);
|
|
55
|
+
});
|
|
56
|
+
it('handles empty existingAttributes', function () {
|
|
57
|
+
var instance = getInstance();
|
|
58
|
+
var newAttributes = ['a', 'b', 'c'];
|
|
59
|
+
var existingAttributes = [];
|
|
60
|
+
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual([]);
|
|
61
|
+
});
|
|
62
|
+
it('handles case with all attributes being duplicates', function () {
|
|
63
|
+
var instance = getInstance();
|
|
64
|
+
var newAttributes = ['a', 'b', 'c'];
|
|
65
|
+
var existingAttributes = ['a', 'b', 'c'];
|
|
66
|
+
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual([]);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('propUpdater', function () {
|
|
70
|
+
// We'll use a mock to check if sendPropUpdate is called with the right arguments
|
|
71
|
+
var mockSendPropUpdate;
|
|
72
|
+
var instance;
|
|
73
|
+
beforeEach(function () {
|
|
74
|
+
instance = new _PivotTableUI["default"]({
|
|
75
|
+
onChange: function onChange() {},
|
|
76
|
+
renderers: {},
|
|
77
|
+
aggregators: {},
|
|
78
|
+
rows: ['gender', 'age'],
|
|
79
|
+
cols: ['country', 'year'],
|
|
80
|
+
rendererName: '',
|
|
81
|
+
aggregatorName: '',
|
|
82
|
+
vals: [],
|
|
83
|
+
valueFilter: {},
|
|
84
|
+
rowOrder: 'key_a_to_z',
|
|
85
|
+
colOrder: 'key_a_to_z',
|
|
86
|
+
derivedAttributes: {},
|
|
87
|
+
data: []
|
|
88
|
+
});
|
|
89
|
+
// Mock the sendPropUpdate method
|
|
90
|
+
mockSendPropUpdate = jest.spyOn(instance, 'sendPropUpdate').mockImplementation(function () {});
|
|
91
|
+
// Mock the handleDuplicates method to control its return value
|
|
92
|
+
jest.spyOn(instance, 'handleDuplicates');
|
|
93
|
+
});
|
|
94
|
+
afterEach(function () {
|
|
95
|
+
mockSendPropUpdate.mockRestore();
|
|
96
|
+
instance.handleDuplicates.mockRestore();
|
|
97
|
+
});
|
|
98
|
+
it('calls handleDuplicates when key is "rows"', function () {
|
|
99
|
+
var newRows = ['gender', 'name'];
|
|
100
|
+
var updater = instance.propUpdater('rows');
|
|
101
|
+
|
|
102
|
+
// Set up the mock to return the same cols (no duplicates found)
|
|
103
|
+
instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);
|
|
104
|
+
updater(newRows);
|
|
105
|
+
expect(instance.handleDuplicates).toHaveBeenCalledWith(newRows, instance.props.cols);
|
|
106
|
+
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
107
|
+
rows: {
|
|
108
|
+
$set: newRows
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
it('calls handleDuplicates when key is "cols"', function () {
|
|
113
|
+
var newCols = ['country', 'city'];
|
|
114
|
+
var updater = instance.propUpdater('cols');
|
|
115
|
+
|
|
116
|
+
// Set up the mock to return the same rows (no duplicates found)
|
|
117
|
+
instance.handleDuplicates.mockReturnValueOnce(instance.props.rows);
|
|
118
|
+
updater(newCols);
|
|
119
|
+
expect(instance.handleDuplicates).toHaveBeenCalledWith(newCols, instance.props.rows);
|
|
120
|
+
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
121
|
+
cols: {
|
|
122
|
+
$set: newCols
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
it('updates cols when duplicate is found in rows update', function () {
|
|
127
|
+
var newRows = ['gender', 'country']; // 'country' is duplicate
|
|
128
|
+
var updater = instance.propUpdater('rows');
|
|
129
|
+
|
|
130
|
+
// 'country' is removed from cols
|
|
131
|
+
var updatedCols = ['year'];
|
|
132
|
+
instance.handleDuplicates.mockReturnValueOnce(updatedCols);
|
|
133
|
+
updater(newRows);
|
|
134
|
+
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
135
|
+
rows: {
|
|
136
|
+
$set: newRows
|
|
137
|
+
},
|
|
138
|
+
cols: {
|
|
139
|
+
$set: updatedCols
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
it('updates rows when duplicate is found in cols update', function () {
|
|
144
|
+
var newCols = ['country', 'gender']; // 'gender' is duplicate
|
|
145
|
+
var updater = instance.propUpdater('cols');
|
|
146
|
+
|
|
147
|
+
// 'gender' is removed from rows
|
|
148
|
+
var updatedRows = ['age'];
|
|
149
|
+
instance.handleDuplicates.mockReturnValueOnce(updatedRows);
|
|
150
|
+
updater(newCols);
|
|
151
|
+
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
152
|
+
cols: {
|
|
153
|
+
$set: newCols
|
|
154
|
+
},
|
|
155
|
+
rows: {
|
|
156
|
+
$set: updatedRows
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
it('does not update the other attribute if no duplicates found', function () {
|
|
161
|
+
var newRows = ['gender', 'name'];
|
|
162
|
+
var updater = instance.propUpdater('rows');
|
|
163
|
+
|
|
164
|
+
// No change to cols (same array reference)
|
|
165
|
+
instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);
|
|
166
|
+
updater(newRows);
|
|
167
|
+
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
168
|
+
rows: {
|
|
169
|
+
$set: newRows
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// We shouldn't have cols in the update
|
|
173
|
+
expect(mockSendPropUpdate.mock.calls[0][0].cols).toBeUndefined();
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=PivotTableUI-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PivotTableUI-test.js","names":["_react","_interopRequireDefault","require","_PivotTableUI","e","__esModule","describe","getInstance","pivotTableUI","PivotTableUI","onChange","renderers","aggregators","rows","cols","rendererName","aggregatorName","vals","valueFilter","rowOrder","colOrder","derivedAttributes","data","it","instance","expect","handleDuplicates","toEqual","undefined","newAttributes","existingAttributes","mockSendPropUpdate","beforeEach","jest","spyOn","mockImplementation","afterEach","mockRestore","newRows","updater","propUpdater","mockReturnValueOnce","props","toHaveBeenCalledWith","$set","newCols","updatedCols","updatedRows","mock","calls","toBeUndefined"],"sources":["../../src/__tests__/PivotTableUI-test.js"],"sourcesContent":["import React from 'react';\nimport PivotTableUI from '../PivotTableUI';\n\ndescribe('PivotTableUI', () => {\n describe('handleDuplicates', () => {\n // Create a minimal instance of PivotTableUI for testing\n const getInstance = () => {\n const pivotTableUI = new PivotTableUI({\n onChange: () => {},\n renderers: {},\n aggregators: {},\n rows: [],\n cols: [],\n rendererName: '',\n aggregatorName: '',\n vals: [],\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n derivedAttributes: {},\n data: []\n });\n return pivotTableUI;\n };\n\n it('returns existingAttributes when newAttributes is null or undefined', () => {\n const instance = getInstance();\n expect(instance.handleDuplicates(null, ['a', 'b'])).toEqual(['a', 'b']);\n expect(instance.handleDuplicates(undefined, ['a', 'b'])).toEqual(['a', 'b']);\n });\n\n it('returns empty array when both inputs are null or undefined', () => {\n const instance = getInstance();\n expect(instance.handleDuplicates(null, null)).toEqual([]);\n expect(instance.handleDuplicates(undefined, undefined)).toEqual([]);\n });\n\n it('returns existingAttributes when there are no duplicates', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['d', 'e', 'f'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(existingAttributes);\n });\n\n it('removes duplicates from existingAttributes', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['b', 'c', 'd'];\n // 'b' and 'c' are duplicates and should be removed\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(['d']);\n });\n\n it('handles empty newAttributes', () => {\n const instance = getInstance();\n const newAttributes = [];\n const existingAttributes = ['a', 'b', 'c'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(existingAttributes);\n });\n\n it('handles empty existingAttributes', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = [];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual([]);\n });\n\n it('handles case with all attributes being duplicates', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['a', 'b', 'c'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual([]);\n });\n });\n\n describe('propUpdater', () => {\n // We'll use a mock to check if sendPropUpdate is called with the right arguments\n let mockSendPropUpdate;\n let instance;\n\n beforeEach(() => {\n instance = new PivotTableUI({\n onChange: () => {},\n renderers: {},\n aggregators: {},\n rows: ['gender', 'age'],\n cols: ['country', 'year'],\n rendererName: '',\n aggregatorName: '',\n vals: [],\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n derivedAttributes: {},\n data: []\n });\n // Mock the sendPropUpdate method\n mockSendPropUpdate = jest.spyOn(instance, 'sendPropUpdate').mockImplementation(() => {});\n // Mock the handleDuplicates method to control its return value\n jest.spyOn(instance, 'handleDuplicates');\n });\n\n afterEach(() => {\n mockSendPropUpdate.mockRestore();\n instance.handleDuplicates.mockRestore();\n });\n\n it('calls handleDuplicates when key is \"rows\"', () => {\n const newRows = ['gender', 'name'];\n const updater = instance.propUpdater('rows');\n \n // Set up the mock to return the same cols (no duplicates found)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);\n \n updater(newRows);\n \n expect(instance.handleDuplicates).toHaveBeenCalledWith(newRows, instance.props.cols);\n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows }\n });\n });\n\n it('calls handleDuplicates when key is \"cols\"', () => {\n const newCols = ['country', 'city'];\n const updater = instance.propUpdater('cols');\n \n // Set up the mock to return the same rows (no duplicates found)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.rows);\n \n updater(newCols);\n \n expect(instance.handleDuplicates).toHaveBeenCalledWith(newCols, instance.props.rows);\n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n cols: { $set: newCols }\n });\n });\n\n it('updates cols when duplicate is found in rows update', () => {\n const newRows = ['gender', 'country']; // 'country' is duplicate\n const updater = instance.propUpdater('rows');\n \n // 'country' is removed from cols\n const updatedCols = ['year'];\n instance.handleDuplicates.mockReturnValueOnce(updatedCols);\n \n updater(newRows);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows },\n cols: { $set: updatedCols }\n });\n });\n\n it('updates rows when duplicate is found in cols update', () => {\n const newCols = ['country', 'gender']; // 'gender' is duplicate\n const updater = instance.propUpdater('cols');\n \n // 'gender' is removed from rows\n const updatedRows = ['age'];\n instance.handleDuplicates.mockReturnValueOnce(updatedRows);\n \n updater(newCols);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n cols: { $set: newCols },\n rows: { $set: updatedRows }\n });\n });\n\n it('does not update the other attribute if no duplicates found', () => {\n const newRows = ['gender', 'name'];\n const updater = instance.propUpdater('rows');\n \n // No change to cols (same array reference)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);\n \n updater(newRows);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows }\n });\n // We shouldn't have cols in the update\n expect(mockSendPropUpdate.mock.calls[0][0].cols).toBeUndefined();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
var utils = _interopRequireWildcard(require("../Utilities"));
|
|
5
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
6
|
+
/* eslint-disable no-magic-numbers */
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* decaffeinate suggestions:
|
|
10
|
+
* DS101: Remove unnecessary use of Array.from
|
|
11
|
+
* DS102: Remove unnecessary code created because of implicit returns
|
|
12
|
+
* DS207: Consider shorter variations of null checks
|
|
13
|
+
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
14
|
+
*/
|
|
15
|
+
var fixtureData = [['name', 'gender', 'colour', 'birthday', 'trials', 'successes'], ['Nick', 'male', 'blue', '1982-11-07', 103, 12], ['Jane', 'female', 'red', '1982-11-08', 95, 25], ['John', 'male', 'blue', '1982-12-08', 112, 30], ['Carol', 'female', 'yellow', '1983-12-08', 102, 14]];
|
|
16
|
+
describe(' utils', function () {
|
|
17
|
+
describe('.PivotData()', function () {
|
|
18
|
+
describe('with no options', function () {
|
|
19
|
+
var aoaInput = [['a', 'b'], [1, 2], [3, 4]];
|
|
20
|
+
var pd = new utils.PivotData({
|
|
21
|
+
data: aoaInput
|
|
22
|
+
});
|
|
23
|
+
it('has the correct grand total value', function () {
|
|
24
|
+
return expect(pd.getAggregator([], []).value()).toBe(2);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('with array-of-array input', function () {
|
|
28
|
+
var aoaInput = [['a', 'b'], [1, 2], [3, 4]];
|
|
29
|
+
var pd = new utils.PivotData({
|
|
30
|
+
data: aoaInput,
|
|
31
|
+
aggregatorName: 'Sum over Sum',
|
|
32
|
+
vals: ['a', 'b']
|
|
33
|
+
});
|
|
34
|
+
it('has the correct grand total value', function () {
|
|
35
|
+
return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('with array-of-object input', function () {
|
|
39
|
+
var aosInput = [{
|
|
40
|
+
a: 1,
|
|
41
|
+
b: 2
|
|
42
|
+
}, {
|
|
43
|
+
a: 3,
|
|
44
|
+
b: 4
|
|
45
|
+
}];
|
|
46
|
+
var pd = new utils.PivotData({
|
|
47
|
+
data: aosInput,
|
|
48
|
+
aggregatorName: 'Sum over Sum',
|
|
49
|
+
vals: ['a', 'b']
|
|
50
|
+
});
|
|
51
|
+
it('has the correct grand total value', function () {
|
|
52
|
+
return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('with ragged array-of-object input', function () {
|
|
56
|
+
var raggedAosInput = [{
|
|
57
|
+
a: 1
|
|
58
|
+
}, {
|
|
59
|
+
b: 4
|
|
60
|
+
}, {
|
|
61
|
+
a: 3,
|
|
62
|
+
b: 2
|
|
63
|
+
}];
|
|
64
|
+
var pd = new utils.PivotData({
|
|
65
|
+
data: raggedAosInput,
|
|
66
|
+
aggregatorName: 'Sum over Sum',
|
|
67
|
+
vals: ['a', 'b']
|
|
68
|
+
});
|
|
69
|
+
it('has the correct grand total value', function () {
|
|
70
|
+
return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('with function input', function () {
|
|
74
|
+
var functionInput = function functionInput(record) {
|
|
75
|
+
record({
|
|
76
|
+
a: 1,
|
|
77
|
+
b: 2
|
|
78
|
+
});
|
|
79
|
+
record({
|
|
80
|
+
a: 3,
|
|
81
|
+
b: 4
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
var pd = new utils.PivotData({
|
|
85
|
+
data: functionInput,
|
|
86
|
+
aggregatorName: 'Sum over Sum',
|
|
87
|
+
vals: ['a', 'b']
|
|
88
|
+
});
|
|
89
|
+
it('has the correct grand total value', function () {
|
|
90
|
+
return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('with rows/cols', function () {
|
|
94
|
+
var pd = new utils.PivotData({
|
|
95
|
+
data: fixtureData,
|
|
96
|
+
rows: ['name', 'colour'],
|
|
97
|
+
cols: ['trials', 'successes']
|
|
98
|
+
});
|
|
99
|
+
it('has correctly-ordered row keys', function () {
|
|
100
|
+
return expect(pd.getRowKeys()).toEqual([['Carol', 'yellow'], ['Jane', 'red'], ['John', 'blue'], ['Nick', 'blue']]);
|
|
101
|
+
});
|
|
102
|
+
it('has correctly-ordered col keys', function () {
|
|
103
|
+
return expect(pd.getColKeys()).toEqual([[95, 25], [102, 14], [103, 12], [112, 30]]);
|
|
104
|
+
});
|
|
105
|
+
it('can be iterated over', function () {
|
|
106
|
+
var numNotNull = 0;
|
|
107
|
+
var numNull = 0;
|
|
108
|
+
for (var _i = 0, _Array$from = Array.from(pd.getRowKeys()); _i < _Array$from.length; _i++) {
|
|
109
|
+
var r = _Array$from[_i];
|
|
110
|
+
for (var _i2 = 0, _Array$from2 = Array.from(pd.getColKeys()); _i2 < _Array$from2.length; _i2++) {
|
|
111
|
+
var c = _Array$from2[_i2];
|
|
112
|
+
if (pd.getAggregator(r, c).value() !== null) {
|
|
113
|
+
numNotNull++;
|
|
114
|
+
} else {
|
|
115
|
+
numNull++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
expect(numNotNull).toBe(4);
|
|
120
|
+
expect(numNull).toBe(12);
|
|
121
|
+
});
|
|
122
|
+
it('returns matching records', function () {
|
|
123
|
+
var records = [];
|
|
124
|
+
pd.forEachMatchingRecord({
|
|
125
|
+
gender: 'male'
|
|
126
|
+
}, function (x) {
|
|
127
|
+
return records.push(x.name);
|
|
128
|
+
});
|
|
129
|
+
expect(records).toEqual(['Nick', 'John']);
|
|
130
|
+
});
|
|
131
|
+
it('has a correct spot-checked aggregator', function () {
|
|
132
|
+
var agg = pd.getAggregator(['Carol', 'yellow'], [102, 14]);
|
|
133
|
+
var val = agg.value();
|
|
134
|
+
expect(val).toBe(1);
|
|
135
|
+
expect(agg.format(val)).toBe('1');
|
|
136
|
+
});
|
|
137
|
+
it('has a correct grand total aggregator', function () {
|
|
138
|
+
var agg = pd.getAggregator([], []);
|
|
139
|
+
var val = agg.value();
|
|
140
|
+
expect(val).toBe(4);
|
|
141
|
+
expect(agg.format(val)).toBe('4');
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('.aggregatorTemplates', function () {
|
|
146
|
+
var getVal = function getVal(agg, vals) {
|
|
147
|
+
return new utils.PivotData({
|
|
148
|
+
data: fixtureData,
|
|
149
|
+
aggregators: {
|
|
150
|
+
agg: agg
|
|
151
|
+
},
|
|
152
|
+
aggregatorName: 'agg',
|
|
153
|
+
vals: vals
|
|
154
|
+
}).getAggregator([], []).value();
|
|
155
|
+
};
|
|
156
|
+
var tpl = utils.aggregatorTemplates;
|
|
157
|
+
describe('.count', function () {
|
|
158
|
+
return it('works', function () {
|
|
159
|
+
return expect(getVal(tpl.count(), [])).toBe(4);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('.countUnique', function () {
|
|
163
|
+
return it('works', function () {
|
|
164
|
+
return expect(getVal(tpl.countUnique(), ['gender'])).toBe(2);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('.listUnique', function () {
|
|
168
|
+
return it('works', function () {
|
|
169
|
+
return expect(getVal(tpl.listUnique(), ['gender'])).toBe('male,female');
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('.average', function () {
|
|
173
|
+
return it('works', function () {
|
|
174
|
+
return expect(getVal(tpl.average(), ['trials'])).toBe(103);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
describe('.sum', function () {
|
|
178
|
+
return it('works', function () {
|
|
179
|
+
return expect(getVal(tpl.sum(), ['trials'])).toBe(412);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('.min', function () {
|
|
183
|
+
return it('works', function () {
|
|
184
|
+
return expect(getVal(tpl.min(), ['trials'])).toBe(95);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe('.max', function () {
|
|
188
|
+
return it('works', function () {
|
|
189
|
+
return expect(getVal(tpl.max(), ['trials'])).toBe(112);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('.first', function () {
|
|
193
|
+
return it('works', function () {
|
|
194
|
+
return expect(getVal(tpl.first(), ['name'])).toBe('Carol');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe('.last', function () {
|
|
198
|
+
return it('works', function () {
|
|
199
|
+
return expect(getVal(tpl.last(), ['name'])).toBe('Nick');
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('.average', function () {
|
|
203
|
+
return it('works', function () {
|
|
204
|
+
return expect(getVal(tpl.average(), ['trials'])).toBe(103);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('.median', function () {
|
|
208
|
+
return it('works', function () {
|
|
209
|
+
return expect(getVal(tpl.median(), ['trials'])).toBe(102.5);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('.quantile', function () {
|
|
213
|
+
return it('works', function () {
|
|
214
|
+
expect(getVal(tpl.quantile(0), ['trials'])).toBe(95);
|
|
215
|
+
expect(getVal(tpl.quantile(0.1), ['trials'])).toBe(98.5);
|
|
216
|
+
expect(getVal(tpl.quantile(0.25), ['trials'])).toBe(98.5);
|
|
217
|
+
expect(getVal(tpl.quantile(1 / 3), ['trials'])).toBe(102);
|
|
218
|
+
expect(getVal(tpl.quantile(1), ['trials'])).toBe(112);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('.var', function () {
|
|
222
|
+
return it('works', function () {
|
|
223
|
+
return expect(getVal(tpl["var"](), ['trials'])).toBe(48.666666666666686);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('.stdev', function () {
|
|
227
|
+
return it('works', function () {
|
|
228
|
+
return expect(getVal(tpl.stdev(), ['trials'])).toBe(6.976149845485451);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
describe('.sumOverSum', function () {
|
|
232
|
+
return it('works', function () {
|
|
233
|
+
return expect(getVal(tpl.sumOverSum(), ['successes', 'trials'])).toBe((12 + 25 + 30 + 14) / (95 + 102 + 103 + 112));
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
describe('.fractionOf', function () {
|
|
237
|
+
return it('works', function () {
|
|
238
|
+
return expect(getVal(tpl.fractionOf(tpl.sum()), ['trials'])).toBe(1);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('.naturalSort()', function () {
|
|
243
|
+
var naturalSort = utils.naturalSort;
|
|
244
|
+
var sortedArr = [null, NaN, -Infinity, '-Infinity', -3, '-3', -2, '-2', -1, '-1', 0, '2e-1', 1, '01', '1', 2, '002', '002e0', '02', '2', '2e-0', 3, 10, '10', '11', '12', '1e2', '112', Infinity, 'Infinity', '1a', '2a', '12a', '20a', 'A', 'A', 'NaN', 'a', 'a', 'a01', 'a012', 'a02', 'a1', 'a2', 'a12', 'a12', 'a21', 'a21', 'b', 'c', 'd', 'null'];
|
|
245
|
+
it('sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)', function () {
|
|
246
|
+
return expect(sortedArr.slice().sort(naturalSort)).toEqual(sortedArr);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
describe('.sortAs()', function () {
|
|
250
|
+
var sortAs = utils.sortAs;
|
|
251
|
+
it('sorts with unknown values sorted at the end', function () {
|
|
252
|
+
return expect([5, 2, 3, 4, 1].sort(sortAs([4, 3, 2]))).toEqual([4, 3, 2, 1, 5]);
|
|
253
|
+
});
|
|
254
|
+
it('sorts lowercase after uppercase', function () {
|
|
255
|
+
return expect(['Ab', 'aA', 'aa', 'ab'].sort(sortAs(['Ab', 'Aa']))).toEqual(['Ab', 'ab', 'aa', 'aA']);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
describe('.numberFormat()', function () {
|
|
259
|
+
var numberFormat = utils.numberFormat;
|
|
260
|
+
it('formats numbers', function () {
|
|
261
|
+
var nf = numberFormat();
|
|
262
|
+
expect(nf(1234567.89123456)).toEqual('1,234,567.89');
|
|
263
|
+
});
|
|
264
|
+
it('formats booleans', function () {
|
|
265
|
+
var nf = numberFormat();
|
|
266
|
+
expect(nf(true)).toEqual('1.00');
|
|
267
|
+
});
|
|
268
|
+
it('formats numbers in strings', function () {
|
|
269
|
+
var nf = numberFormat();
|
|
270
|
+
expect(nf('1234567.89123456')).toEqual('1,234,567.89');
|
|
271
|
+
});
|
|
272
|
+
it("doesn't formats strings", function () {
|
|
273
|
+
var nf = numberFormat();
|
|
274
|
+
expect(nf('hi there')).toEqual('');
|
|
275
|
+
});
|
|
276
|
+
it("doesn't formats objects", function () {
|
|
277
|
+
var nf = numberFormat();
|
|
278
|
+
expect(nf({
|
|
279
|
+
a: 1
|
|
280
|
+
})).toEqual('');
|
|
281
|
+
});
|
|
282
|
+
it('formats percentages', function () {
|
|
283
|
+
var nf = numberFormat({
|
|
284
|
+
scaler: 100,
|
|
285
|
+
suffix: '%'
|
|
286
|
+
});
|
|
287
|
+
expect(nf(0.12345)).toEqual('12.35%');
|
|
288
|
+
});
|
|
289
|
+
it('adds separators', function () {
|
|
290
|
+
var nf = numberFormat({
|
|
291
|
+
thousandsSep: 'a',
|
|
292
|
+
decimalSep: 'b'
|
|
293
|
+
});
|
|
294
|
+
expect(nf(1234567.89123456)).toEqual('1a234a567b89');
|
|
295
|
+
});
|
|
296
|
+
it('adds prefixes and suffixes', function () {
|
|
297
|
+
var nf = numberFormat({
|
|
298
|
+
prefix: 'a',
|
|
299
|
+
suffix: 'b'
|
|
300
|
+
});
|
|
301
|
+
expect(nf(1234567.89123456)).toEqual('a1,234,567.89b');
|
|
302
|
+
});
|
|
303
|
+
it('scales and rounds', function () {
|
|
304
|
+
var nf = numberFormat({
|
|
305
|
+
digitsAfterDecimal: 3,
|
|
306
|
+
scaler: 1000
|
|
307
|
+
});
|
|
308
|
+
expect(nf(1234567.89123456)).toEqual('1,234,567,891.235');
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
describe('.derivers', function () {
|
|
312
|
+
describe('.dateFormat()', function () {
|
|
313
|
+
var df = utils.derivers.dateFormat('x', 'abc % %% %%% %a %y %m %n %d %w %x %H %M %S', true);
|
|
314
|
+
it('formats date objects', function () {
|
|
315
|
+
return expect(df({
|
|
316
|
+
x: new Date('2015-01-02T23:43:11Z')
|
|
317
|
+
})).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');
|
|
318
|
+
});
|
|
319
|
+
it('formats input parsed by Date.parse()', function () {
|
|
320
|
+
expect(df({
|
|
321
|
+
x: '2015-01-02T23:43:11Z'
|
|
322
|
+
})).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');
|
|
323
|
+
expect(df({
|
|
324
|
+
x: 'bla'
|
|
325
|
+
})).toBe('');
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('.bin()', function () {
|
|
329
|
+
var binner = utils.derivers.bin('x', 10);
|
|
330
|
+
it('bins numbers', function () {
|
|
331
|
+
expect(binner({
|
|
332
|
+
x: 11
|
|
333
|
+
})).toBe(10);
|
|
334
|
+
expect(binner({
|
|
335
|
+
x: 9
|
|
336
|
+
})).toBe(0);
|
|
337
|
+
expect(binner({
|
|
338
|
+
x: 111
|
|
339
|
+
})).toBe(110);
|
|
340
|
+
});
|
|
341
|
+
it('bins booleans', function () {
|
|
342
|
+
return expect(binner({
|
|
343
|
+
x: true
|
|
344
|
+
})).toBe(0);
|
|
345
|
+
});
|
|
346
|
+
it('bins negative numbers', function () {
|
|
347
|
+
return expect(binner({
|
|
348
|
+
x: -12
|
|
349
|
+
})).toBe(-10);
|
|
350
|
+
});
|
|
351
|
+
it("doesn't bin strings", function () {
|
|
352
|
+
return expect(binner({
|
|
353
|
+
x: 'a'
|
|
354
|
+
})).toBeNaN();
|
|
355
|
+
});
|
|
356
|
+
it("doesn't bin objects", function () {
|
|
357
|
+
return expect(binner({
|
|
358
|
+
x: {
|
|
359
|
+
a: 1
|
|
360
|
+
}
|
|
361
|
+
})).toBeNaN();
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
//# sourceMappingURL=Utilities-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utilities-test.js","names":["utils","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","fixtureData","describe","aoaInput","pd","PivotData","data","it","expect","getAggregator","value","toBe","aggregatorName","vals","aosInput","a","b","raggedAosInput","functionInput","record","rows","cols","getRowKeys","toEqual","getColKeys","numNotNull","numNull","_i","_Array$from","Array","from","length","_i2","_Array$from2","c","records","forEachMatchingRecord","gender","x","push","name","agg","val","format","getVal","aggregators","tpl","aggregatorTemplates","count","countUnique","listUnique","average","sum","min","max","first","last","median","quantile","stdev","sumOverSum","fractionOf","naturalSort","sortedArr","NaN","Infinity","slice","sort","sortAs","numberFormat","nf","scaler","suffix","thousandsSep","decimalSep","prefix","digitsAfterDecimal","df","derivers","dateFormat","Date","binner","bin","toBeNaN"],"sources":["../../src/__tests__/Utilities-test.js"],"sourcesContent":["import * as utils from '../Utilities';\n/* eslint-disable no-magic-numbers */\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nconst fixtureData = [\n ['name', 'gender', 'colour', 'birthday', 'trials', 'successes'],\n ['Nick', 'male', 'blue', '1982-11-07', 103, 12],\n ['Jane', 'female', 'red', '1982-11-08', 95, 25],\n ['John', 'male', 'blue', '1982-12-08', 112, 30],\n ['Carol', 'female', 'yellow', '1983-12-08', 102, 14],\n];\n\ndescribe(' utils', function() {\n describe('.PivotData()', function() {\n describe('with no options', function() {\n const aoaInput = [['a', 'b'], [1, 2], [3, 4]];\n const pd = new utils.PivotData({data: aoaInput});\n\n it('has the correct grand total value', () =>\n expect(pd.getAggregator([], []).value()).toBe(2));\n });\n\n describe('with array-of-array input', function() {\n const aoaInput = [['a', 'b'], [1, 2], [3, 4]];\n const pd = new utils.PivotData({\n data: aoaInput,\n aggregatorName: 'Sum over Sum',\n vals: ['a', 'b'],\n });\n\n it('has the correct grand total value', () =>\n expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4)));\n });\n\n describe('with array-of-object input', function() {\n const aosInput = [{a: 1, b: 2}, {a: 3, b: 4}];\n const pd = new utils.PivotData({\n data: aosInput,\n aggregatorName: 'Sum over Sum',\n vals: ['a', 'b'],\n });\n\n it('has the correct grand total value', () =>\n expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4)));\n });\n\n describe('with ragged array-of-object input', function() {\n const raggedAosInput = [{a: 1}, {b: 4}, {a: 3, b: 2}];\n const pd = new utils.PivotData({\n data: raggedAosInput,\n aggregatorName: 'Sum over Sum',\n vals: ['a', 'b'],\n });\n\n it('has the correct grand total value', () =>\n expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4)));\n });\n\n describe('with function input', function() {\n const functionInput = function(record) {\n record({a: 1, b: 2});\n record({a: 3, b: 4});\n };\n const pd = new utils.PivotData({\n data: functionInput,\n aggregatorName: 'Sum over Sum',\n vals: ['a', 'b'],\n });\n\n it('has the correct grand total value', () =>\n expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4)));\n });\n\n describe('with rows/cols', function() {\n const pd = new utils.PivotData({\n data: fixtureData,\n rows: ['name', 'colour'],\n cols: ['trials', 'successes'],\n });\n\n it('has correctly-ordered row keys', () =>\n expect(pd.getRowKeys()).toEqual([\n ['Carol', 'yellow'],\n ['Jane', 'red'],\n ['John', 'blue'],\n ['Nick', 'blue'],\n ]));\n\n it('has correctly-ordered col keys', () =>\n expect(pd.getColKeys()).toEqual([\n [95, 25],\n [102, 14],\n [103, 12],\n [112, 30],\n ]));\n\n it('can be iterated over', function() {\n let numNotNull = 0;\n let numNull = 0;\n for (const r of Array.from(pd.getRowKeys())) {\n for (const c of Array.from(pd.getColKeys())) {\n if (pd.getAggregator(r, c).value() !== null) {\n numNotNull++;\n } else {\n numNull++;\n }\n }\n }\n expect(numNotNull).toBe(4);\n expect(numNull).toBe(12);\n });\n\n it('returns matching records', function() {\n const records = [];\n pd.forEachMatchingRecord({gender: 'male'}, x => records.push(x.name));\n expect(records).toEqual(['Nick', 'John']);\n });\n\n it('has a correct spot-checked aggregator', function() {\n const agg = pd.getAggregator(['Carol', 'yellow'], [102, 14]);\n const val = agg.value();\n expect(val).toBe(1);\n expect(agg.format(val)).toBe('1');\n });\n\n it('has a correct grand total aggregator', function() {\n const agg = pd.getAggregator([], []);\n const val = agg.value();\n expect(val).toBe(4);\n expect(agg.format(val)).toBe('4');\n });\n });\n });\n\n describe('.aggregatorTemplates', function() {\n const getVal = (agg, vals) => {\n return new utils.PivotData({\n data: fixtureData,\n aggregators: {agg},\n aggregatorName: 'agg',\n vals,\n })\n .getAggregator([], [])\n .value();\n };\n const tpl = utils.aggregatorTemplates;\n\n describe('.count', () =>\n it('works', () => expect(getVal(tpl.count(), [])).toBe(4)));\n\n describe('.countUnique', () =>\n it('works', () => expect(getVal(tpl.countUnique(), ['gender'])).toBe(2)));\n\n describe('.listUnique', () =>\n it('works', () =>\n expect(getVal(tpl.listUnique(), ['gender'])).toBe('male,female')));\n\n describe('.average', () =>\n it('works', () => expect(getVal(tpl.average(), ['trials'])).toBe(103)));\n\n describe('.sum', () =>\n it('works', () => expect(getVal(tpl.sum(), ['trials'])).toBe(412)));\n\n describe('.min', () =>\n it('works', () => expect(getVal(tpl.min(), ['trials'])).toBe(95)));\n\n describe('.max', () =>\n it('works', () => expect(getVal(tpl.max(), ['trials'])).toBe(112)));\n\n describe('.first', () =>\n it('works', () => expect(getVal(tpl.first(), ['name'])).toBe('Carol')));\n\n describe('.last', () =>\n it('works', () => expect(getVal(tpl.last(), ['name'])).toBe('Nick')));\n\n describe('.average', () =>\n it('works', () => expect(getVal(tpl.average(), ['trials'])).toBe(103)));\n\n describe('.median', () =>\n it('works', () => expect(getVal(tpl.median(), ['trials'])).toBe(102.5)));\n\n describe('.quantile', () =>\n it('works', function() {\n expect(getVal(tpl.quantile(0), ['trials'])).toBe(95);\n expect(getVal(tpl.quantile(0.1), ['trials'])).toBe(98.5);\n expect(getVal(tpl.quantile(0.25), ['trials'])).toBe(98.5);\n expect(getVal(tpl.quantile(1 / 3), ['trials'])).toBe(102);\n expect(getVal(tpl.quantile(1), ['trials'])).toBe(112);\n }));\n\n describe('.var', () =>\n it('works', () =>\n expect(getVal(tpl.var(), ['trials'])).toBe(48.666666666666686)));\n\n describe('.stdev', () =>\n it('works', () =>\n expect(getVal(tpl.stdev(), ['trials'])).toBe(6.976149845485451)));\n\n describe('.sumOverSum', () =>\n it('works', () =>\n expect(getVal(tpl.sumOverSum(), ['successes', 'trials'])).toBe(\n (12 + 25 + 30 + 14) / (95 + 102 + 103 + 112)\n )));\n\n describe('.fractionOf', () =>\n it('works', () =>\n expect(getVal(tpl.fractionOf(tpl.sum()), ['trials'])).toBe(1)));\n });\n\n describe('.naturalSort()', function() {\n const {naturalSort} = utils;\n\n const sortedArr = [\n null,\n NaN,\n -Infinity,\n '-Infinity',\n -3,\n '-3',\n -2,\n '-2',\n -1,\n '-1',\n 0,\n '2e-1',\n 1,\n '01',\n '1',\n 2,\n '002',\n '002e0',\n '02',\n '2',\n '2e-0',\n 3,\n 10,\n '10',\n '11',\n '12',\n '1e2',\n '112',\n Infinity,\n 'Infinity',\n '1a',\n '2a',\n '12a',\n '20a',\n 'A',\n 'A',\n 'NaN',\n 'a',\n 'a',\n 'a01',\n 'a012',\n 'a02',\n 'a1',\n 'a2',\n 'a12',\n 'a12',\n 'a21',\n 'a21',\n 'b',\n 'c',\n 'd',\n 'null',\n ];\n\n it('sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)', () =>\n expect(sortedArr.slice().sort(naturalSort)).toEqual(sortedArr));\n });\n\n describe('.sortAs()', function() {\n const {sortAs} = utils;\n\n it('sorts with unknown values sorted at the end', () =>\n expect([5, 2, 3, 4, 1].sort(sortAs([4, 3, 2]))).toEqual([4, 3, 2, 1, 5]));\n\n it('sorts lowercase after uppercase', () =>\n expect(['Ab', 'aA', 'aa', 'ab'].sort(sortAs(['Ab', 'Aa']))).toEqual([\n 'Ab',\n 'ab',\n 'aa',\n 'aA',\n ]));\n });\n\n describe('.numberFormat()', function() {\n const {numberFormat} = utils;\n\n it('formats numbers', function() {\n const nf = numberFormat();\n expect(nf(1234567.89123456)).toEqual('1,234,567.89');\n });\n\n it('formats booleans', function() {\n const nf = numberFormat();\n expect(nf(true)).toEqual('1.00');\n });\n\n it('formats numbers in strings', function() {\n const nf = numberFormat();\n expect(nf('1234567.89123456')).toEqual('1,234,567.89');\n });\n\n it(\"doesn't formats strings\", function() {\n const nf = numberFormat();\n expect(nf('hi there')).toEqual('');\n });\n\n it(\"doesn't formats objects\", function() {\n const nf = numberFormat();\n expect(nf({a: 1})).toEqual('');\n });\n\n it('formats percentages', function() {\n const nf = numberFormat({scaler: 100, suffix: '%'});\n expect(nf(0.12345)).toEqual('12.35%');\n });\n\n it('adds separators', function() {\n const nf = numberFormat({thousandsSep: 'a', decimalSep: 'b'});\n expect(nf(1234567.89123456)).toEqual('1a234a567b89');\n });\n\n it('adds prefixes and suffixes', function() {\n const nf = numberFormat({prefix: 'a', suffix: 'b'});\n expect(nf(1234567.89123456)).toEqual('a1,234,567.89b');\n });\n\n it('scales and rounds', function() {\n const nf = numberFormat({digitsAfterDecimal: 3, scaler: 1000});\n expect(nf(1234567.89123456)).toEqual('1,234,567,891.235');\n });\n });\n\n describe('.derivers', function() {\n describe('.dateFormat()', function() {\n const df = utils.derivers.dateFormat(\n 'x',\n 'abc % %% %%% %a %y %m %n %d %w %x %H %M %S',\n true\n );\n\n it('formats date objects', () =>\n expect(df({x: new Date('2015-01-02T23:43:11Z')})).toBe(\n 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n ));\n\n it('formats input parsed by Date.parse()', function() {\n expect(df({x: '2015-01-02T23:43:11Z'})).toBe(\n 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n );\n\n expect(df({x: 'bla'})).toBe('');\n });\n });\n\n describe('.bin()', function() {\n const binner = utils.derivers.bin('x', 10);\n\n it('bins numbers', function() {\n expect(binner({x: 11})).toBe(10);\n\n expect(binner({x: 9})).toBe(0);\n\n expect(binner({x: 111})).toBe(110);\n });\n\n it('bins booleans', () => expect(binner({x: true})).toBe(0));\n\n it('bins negative numbers', () => expect(binner({x: -12})).toBe(-10));\n\n it(\"doesn't bin strings\", () => expect(binner({x: 'a'})).toBeNaN());\n\n it(\"doesn't bin objects\", () => expect(binner({x: {a: 1}})).toBeNaN());\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|