Skip to content

Commit 7bd5e1d

Browse files
committed
Added to_arrow() tests and re-enabled tests for asm.js
1 parent 52b669a commit 7bd5e1d

File tree

5 files changed

+127
-28
lines changed

5 files changed

+127
-28
lines changed

packages/perspective/bench/js/bench.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const LIMIT = args.indexOf("--limit");
1616

1717
const multi_template = (xs, ...ys) => ys[0].map((y, i) => [y, xs.reduce((z, x, ix) => (ys[ix] ? z + x + ys[ix][i] : z + x), "")]);
1818

19-
const UNPKG_VERSIONS = ["0.2.11", "0.2.10", "0.2.9", "0.2.8", "0.2.7", "0.2.6", "0.2.5", "0.2.4", "0.2.3", "0.2.2", "0.2.1", "0.2.0"];
19+
const UNPKG_VERSIONS = ["0.2.15", "0.2.12", "0.2.11", "0.2.10", "0.2.9", "0.2.8", "0.2.7", "0.2.6", "0.2.5", "0.2.4", "0.2.3", "0.2.2", "0.2.1", "0.2.0"];
2020
const UNPKG_URLS = multi_template`https://unpkg.com/@jpmorganchase/perspective@${UNPKG_VERSIONS}/build/perspective.js`;
2121

2222
const OLD_FORMAT_UNPKG_VERSIONS = ["0.2.0-beta.3"];

packages/perspective/bench/js/browser_runtime.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ async function* run_all_cases() {
144144
yield* run_view_cases(table, config);
145145
yield* run_to_format_cases(table, config, "to_json");
146146
yield* run_to_format_cases(table, config, "to_columns");
147+
yield* run_to_format_cases(table, config, "to_arrow");
147148
}
148149
}
149150
}

packages/perspective/test/js/constructors.js

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ var data_6 = [{x: "š"}];
141141

142142
var int_float_data = [{int: 1, float: 2.25}, {int: 2, float: 3.5}, {int: 3, float: 4.75}, {int: 4, float: 5.25}];
143143
var int_float_string_data = [{int: 1, float: 2.25, string: "a"}, {int: 2, float: 3.5, string: "b"}, {int: 3, float: 4.75, string: "c"}, {int: 4, float: 5.25, string: "d"}];
144-
var datetime_data = [{datetime: +new Date(), int: 1}, {datetime: +new Date(), int: 1}, {datetime: +new Date(), int: 2}, {datetime: +new Date(), int: 2}];
144+
var datetime_data = [{datetime: new Date(), int: 1}, {datetime: new Date(), int: 1}, {datetime: new Date(), int: 2}, {datetime: new Date(), int: 2}];
145145

146146
// utility for checking typed arrays
147147
function validate_typed_array(typed_array, column_data) {
@@ -207,7 +207,7 @@ module.exports = perspective => {
207207
var table = perspective.table(int_float_data);
208208
var view = table.view();
209209
const result = await view.col_to_js_typed_array("int");
210-
expect(result.byteLength).toEqual(16);
210+
expect(result[0].byteLength).toEqual(16);
211211
view.delete();
212212
table.delete();
213213
});
@@ -216,16 +216,18 @@ module.exports = perspective => {
216216
var table = perspective.table(int_float_data);
217217
var view = table.view();
218218
const result = await view.col_to_js_typed_array("float");
219-
expect(result.byteLength).toEqual(32);
219+
expect(result[0].byteLength).toEqual(32);
220220
view.delete();
221221
table.delete();
222222
});
223223

224224
it("Datetime, 0-sided view", async function() {
225225
var table = perspective.table(datetime_data);
226226
var view = table.view();
227+
var schema = await view.schema();
228+
expect(schema).toEqual({datetime: "datetime", int: "integer"});
227229
const result = await view.col_to_js_typed_array("datetime");
228-
expect(result.byteLength).toEqual(32);
230+
expect(result[0].byteLength).toEqual(32);
229231
view.delete();
230232
table.delete();
231233
});
@@ -238,7 +240,7 @@ module.exports = perspective => {
238240
});
239241
const result = await view.col_to_js_typed_array("int");
240242
// should include aggregate row
241-
expect(result.byteLength).toEqual(20);
243+
expect(result[0].byteLength).toEqual(20);
242244
view.delete();
243245
table.delete();
244246
});
@@ -250,7 +252,7 @@ module.exports = perspective => {
250252
aggregate: [{op: "sum", column: "int"}, {op: "sum", column: "float"}]
251253
});
252254
const result = await view.col_to_js_typed_array("float");
253-
expect(result.byteLength).toEqual(40);
255+
expect(result[0].byteLength).toEqual(40);
254256
view.delete();
255257
table.delete();
256258
});
@@ -262,7 +264,7 @@ module.exports = perspective => {
262264
aggregate: [{op: "high", column: "datetime"}]
263265
});
264266
const result = await view.col_to_js_typed_array("datetime");
265-
expect(result.byteLength).toEqual(24);
267+
expect(result[0].byteLength).toEqual(24);
266268
view.delete();
267269
table.delete();
268270
});
@@ -275,7 +277,7 @@ module.exports = perspective => {
275277
aggregate: [{op: "sum", column: "int"}, {op: "sum", column: "float"}]
276278
});
277279
const result = await view.col_to_js_typed_array("3.5|int");
278-
expect(result.byteLength).toEqual(20);
280+
expect(result[0].byteLength).toEqual(20);
279281
view.delete();
280282
table.delete();
281283
});
@@ -288,7 +290,7 @@ module.exports = perspective => {
288290
aggregate: [{op: "sum", column: "int"}, {op: "sum", column: "float"}]
289291
});
290292
const result = await view.col_to_js_typed_array("3.5|float");
291-
expect(result.byteLength).toEqual(40);
293+
expect(result[0].byteLength).toEqual(40);
292294
view.delete();
293295
table.delete();
294296
});
@@ -298,7 +300,7 @@ module.exports = perspective => {
298300
var view = table.view({column_pivot: ["float"]});
299301
const result = await view.col_to_js_typed_array("3.5|int");
300302
// bytelength should not include the aggregate row
301-
expect(result.byteLength).toEqual(16);
303+
expect(result[0].byteLength).toEqual(16);
302304
view.delete();
303305
table.delete();
304306
});
@@ -307,31 +309,22 @@ module.exports = perspective => {
307309
var table = perspective.table(int_float_data);
308310
var view = table.view({column_pivot: ["float"]});
309311
const result = await view.col_to_js_typed_array("3.5|float");
310-
expect(result.byteLength).toEqual(32);
311-
view.delete();
312-
table.delete();
313-
});
314-
315-
it("Undefined for non-int/float columns", async function() {
316-
var table = perspective.table(int_float_string_data);
317-
var view = table.view();
318-
const result = await view.col_to_js_typed_array("string");
319-
expect(result).toBeUndefined();
312+
expect(result[0].byteLength).toEqual(32);
320313
view.delete();
321314
table.delete();
322315
});
323316

324317
it("Symmetric output with to_columns, 0-sided", async function() {
325-
let table = perspective.table(int_float_string_data);
318+
let table = perspective.table(int_float_data);
326319
let view = table.view();
327320
let cols = await view.to_columns();
328321

329322
for (let col in cols) {
330323
let ta = await view.col_to_js_typed_array(col);
331324
let column = cols[col];
332325
if (ta !== undefined && column !== undefined) {
333-
expect(ta.length).toEqual(cols[col].length);
334-
expect(validate_typed_array(ta, cols[col])).toEqual(true);
326+
expect(ta[0].length).toEqual(cols[col].length);
327+
expect(validate_typed_array(ta[0], cols[col])).toEqual(true);
335328
}
336329
}
337330
view.delete();
@@ -350,8 +343,8 @@ module.exports = perspective => {
350343
let ta = await view.col_to_js_typed_array(col);
351344
let column = cols[col];
352345
if (ta !== undefined && column !== undefined) {
353-
expect(ta.length).toEqual(cols[col].length);
354-
expect(validate_typed_array(ta, cols[col])).toEqual(true);
346+
expect(ta[0].length).toEqual(cols[col].length);
347+
expect(validate_typed_array(ta[0], cols[col])).toEqual(true);
355348
}
356349
}
357350
view.delete();

packages/perspective/test/js/perspective.spec.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ const RUNTIMES = {
1313
NODE: node_perspective
1414
};
1515

16-
if (!process.env.PSP_DEBUG && window.perspective) {
16+
if (!process.env.PSP_DEBUG) {
1717
require("../../build/perspective.asmjs.worker.js");
18-
RUNTIMES.ASMJS = window.perspective;
18+
RUNTIMES.ASMJS = global.perspective;
1919
}
2020

2121
const clear_tests = require("./clear.js");
@@ -24,6 +24,7 @@ const pivot_tests = require("./pivots.js");
2424
const update_tests = require("./updates.js");
2525
const filter_tests = require("./filters.js");
2626
const internal_tests = require("./internal.js");
27+
const toformat_tests = require("./to_format.js");
2728

2829
describe("perspective.js", function() {
2930
Object.keys(RUNTIMES).forEach(function(mode) {
@@ -33,6 +34,7 @@ describe("perspective.js", function() {
3334
pivot_tests(RUNTIMES[mode]);
3435
update_tests(RUNTIMES[mode]);
3536
filter_tests(RUNTIMES[mode]);
37+
toformat_tests(RUNTIMES[mode]);
3638
internal_tests(RUNTIMES[mode], mode);
3739
});
3840
});
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/******************************************************************************
2+
*
3+
* Copyright (c) 2017, the Perspective Authors.
4+
*
5+
* This file is part of the Perspective library, distributed under the terms of
6+
* the Apache License 2.0. The full license can be found in the LICENSE file.
7+
*
8+
*/
9+
10+
var int_float_string_data = [
11+
{int: 1, float: 2.25, string: "a", datetime: new Date()},
12+
{int: 2, float: 3.5, string: "b", datetime: new Date()},
13+
{int: 3, float: 4.75, string: "c", datetime: new Date()},
14+
{int: 4, float: 5.25, string: "d", datetime: new Date()}
15+
];
16+
17+
module.exports = perspective => {
18+
describe("to_arrow()", function() {
19+
it("Transitive arrow output 0-sided", async function() {
20+
let table = perspective.table(int_float_string_data);
21+
let view = table.view();
22+
let arrow = await view.to_arrow();
23+
let json2 = await view.to_json();
24+
expect(arrow.byteLength).toEqual(940);
25+
26+
let table2 = perspective.table(arrow);
27+
let view2 = table2.view();
28+
let json = await view2.to_json();
29+
expect(json).toEqual(json2);
30+
31+
view2.delete();
32+
table2.delete();
33+
view.delete();
34+
table.delete();
35+
});
36+
37+
it("Transitive arrow output 1-sided", async function() {
38+
let table = perspective.table(int_float_string_data);
39+
let view = table.view({row_pivot: ["string"]});
40+
let json = await view.to_json();
41+
let arrow = await view.to_arrow();
42+
let table2 = perspective.table(arrow);
43+
let view2 = table2.view();
44+
let json2 = await view2.to_json();
45+
46+
expect(json2).toEqual(
47+
json.map(x => {
48+
delete x["__ROW_PATH__"];
49+
return x;
50+
})
51+
);
52+
53+
view2.delete();
54+
table2.delete();
55+
view.delete();
56+
table.delete();
57+
});
58+
59+
it("Transitive arrow output 2-sided", async function() {
60+
let table = perspective.table(int_float_string_data);
61+
let view = table.view({row_pivot: ["string"], col_pivot: ["int"]});
62+
let json = await view.to_json();
63+
let arrow = await view.to_arrow();
64+
let table2 = perspective.table(arrow);
65+
let view2 = table2.view();
66+
let json2 = await view2.to_json();
67+
68+
expect(json2).toEqual(
69+
json.map(x => {
70+
delete x["__ROW_PATH__"];
71+
return x;
72+
})
73+
);
74+
75+
view2.delete();
76+
table2.delete();
77+
view.delete();
78+
table.delete();
79+
});
80+
81+
it("Transitive arrow output 2-sided column only", async function() {
82+
let table = perspective.table(int_float_string_data);
83+
let view = table.view({col_pivot: ["string"]});
84+
let json = await view.to_json();
85+
let arrow = await view.to_arrow();
86+
let table2 = perspective.table(arrow);
87+
let view2 = table2.view();
88+
let json2 = await view2.to_json();
89+
90+
expect(json2).toEqual(
91+
json.map(x => {
92+
delete x["__ROW_PATH__"];
93+
return x;
94+
})
95+
);
96+
97+
view2.delete();
98+
table2.delete();
99+
view.delete();
100+
table.delete();
101+
});
102+
});
103+
};

0 commit comments

Comments
 (0)