You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
"use strict";
|
|
|
|
const tape = require("tape");
|
|
const { Temporal } = require("@js-temporal/polyfill");
|
|
const path = require("path");
|
|
const seedRandom = require("seed-random");
|
|
const filledArray = require("fix-esm").require("filled-array").default;
|
|
|
|
require("../../src/packages/tape-snapshot").setup(tape, path.join(__dirname, "_snapshots"));
|
|
|
|
const coders = require("../../src/storage-encoder/coders");
|
|
const encodeField = require("../../src/storage-encoder/encode-field");
|
|
const namedCartesianProduct = require("../../src/packages/named-cartesian-product");
|
|
|
|
const zonedTemporal = Temporal.ZonedDateTime.from("2021-11-27T23:43:32.81701281+01:00[Europe/Amsterdam]");
|
|
const unzonedTemporal = Temporal.Instant.from("2021-11-27T22:43:32.821012817Z");
|
|
const jsDate = new Date("2021-11-27T22:43:32.821012817Z");
|
|
|
|
tape("date encoding", (test) => {
|
|
let encodingConfigurations = namedCartesianProduct({
|
|
value: [ zonedTemporal, unzonedTemporal, jsDate ],
|
|
withTimezone: [ true, false ],
|
|
asIndexKey: [ true, false ]
|
|
});
|
|
|
|
let encoded = encodingConfigurations.map(({ value, withTimezone, asIndexKey }) => {
|
|
// NOTE: This uses `doEncode` to ensure that the input gets normalized to the internal data representation first. This needs to eventually be changed to use `coders.encode` directly, with separate tests for normalization!
|
|
return encodeField({ value, withTimezone, asIndexKey, fieldType: "date", name: "_", required: true });
|
|
});
|
|
|
|
test.equalsSnapshot(encoded);
|
|
|
|
// FIXME: Decode values again
|
|
|
|
test.end();
|
|
});
|
|
|
|
tape("integer encoding", (test) => {
|
|
let generateNumber = seedRandom("zapdb-number-test");
|
|
|
|
let numberLists = [];
|
|
|
|
// TODO: Add tests for higher numbers using BigInts
|
|
for (let magnitude = 1; magnitude < 15; magnitude++) {
|
|
let maxNumber = Math.pow(10, magnitude);
|
|
numberLists.push(filledArray(() => Math.floor(generateNumber() * maxNumber), 30));
|
|
}
|
|
|
|
let positiveNumbers = numberLists.flat();
|
|
let negativeNumbers = positiveNumbers.map((number) => 0 - number);
|
|
|
|
let allNumbers = [
|
|
... positiveNumbers,
|
|
... negativeNumbers
|
|
];
|
|
|
|
let encodedNumbers = allNumbers.map((number) => {
|
|
return [
|
|
coders.encode("integer", number, { asIndexKey: true }),
|
|
coders.encode("integer", number, { asIndexKey: false }),
|
|
];
|
|
});
|
|
|
|
test.equalsSnapshot(encodedNumbers);
|
|
|
|
// FIXME: Decode values again
|
|
|
|
test.end();
|
|
});
|
|
|
|
|
|
tape("boolean encoding", (test) => {
|
|
test.equalsSnapshot([
|
|
coders.encode("boolean", true, { asIndexKey: true }),
|
|
coders.encode("boolean", true, { asIndexKey: false }),
|
|
coders.encode("boolean", false, { asIndexKey: true }),
|
|
coders.encode("boolean", false, { asIndexKey: false }),
|
|
]);
|
|
|
|
// FIXME: Decode values again
|
|
|
|
test.end();
|
|
});
|