Files
2026-07-13 12:25:07 +08:00

72 lines
4.1 KiB
JavaScript

// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
// ┃ This file is part of the Perspective library, distributed under the terms ┃
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
import { test, expect } from "@perspective-dev/test";
import perspective from "../perspective_client";
import * as common from "./common.js";
/**
* Tests the correctness of each datetime computation function in various
* environments and parameters - different types, nulls, undefined, etc.
*/
((perspective) => {
test.describe("bucket() function", function () {
test.describe("parses arguments separated by arbitrary whitespace", function () {
for (const [title, expression] of [
["space before", `bucket( "a",'Y')`],
["space after", `bucket("a",'Y' )`],
["space between", `bucket("a", 'Y')`],
["two spaces before", `bucket( "a",'Y')`],
["two spaces after", `bucket("a",'Y' )`],
["two spaces between", `bucket("a", 'Y')`],
["space before between and after", `bucket( "a", 'Y' )`],
[
"two spaces before between and after",
`bucket( "a", 'Y' )`,
],
]) {
test(title, async function () {
const table = await perspective.table({
a: "datetime",
});
const view = await table.view({
expressions: [expression].reduce(
(x, y) => Object.assign(x, { [y]: y }),
{},
),
});
await table.update({
a: [
new Date(2020, 0, 12),
new Date(2020, 0, 15),
new Date(2021, 11, 17),
new Date(2019, 2, 18),
new Date(2019, 2, 29),
],
});
let result = await view.to_columns();
expect(
result[expression].map((x) => (x ? new Date(x) : null)),
).toEqual(result.a.map((x) => common.year_bucket(x)));
view.delete();
table.delete();
});
}
});
});
})(perspective);