@dpkit/table
Version:
Data Package implementation in TypeScript.
69 lines • 10.3 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "../../table/index.js";
describe("parseNumberField", () => {
it.each([
// Basic number parsing
["1", 1.0, {}],
["2", 2.0, {}],
["1000", 1000.0, {}],
["1.5", 1.5, {}],
// biome-ignore lint/suspicious: tests
["3.14159", 3.14159, {}],
["-42", -42.0, {}],
["-3.14", -3.14, {}],
// Empty or invalid values
["", null, {}],
["bad", null, {}],
["text", null, {}],
// Group character handling
["1", 1.0, { groupChar: "," }],
["1,000", 1000.0, { groupChar: "," }],
["1,000,000", 1000000.0, { groupChar: "," }],
["1 000", 1000.0, { groupChar: " " }],
["1#000#000", 1000000.0, { groupChar: "#" }],
// Decimal character handling
["1.5", 1.5, { decimalChar: "." }],
["1,5", 1.5, { decimalChar: "," }],
["3,14", 3.14, { decimalChar: "," }],
["3.14", 3.14, { decimalChar: "." }],
// Bare number handling
["1.5", 1.5, { bareNumber: true }],
["$1.5", null, { bareNumber: true }],
["1.5%", null, { bareNumber: true }],
["$1.5", 1.5, { bareNumber: false }],
["1.5%", 1.5, { bareNumber: false }],
["$1,000.00", null, { bareNumber: true }],
["$1,000.00", 1000.0, { bareNumber: false, groupChar: "," }],
[
"€ 1.000,00",
1000.0,
{ bareNumber: false, groupChar: ".", decimalChar: "," },
],
[
"1.000,00 €",
1000.0,
{ bareNumber: false, groupChar: ".", decimalChar: "," },
],
// Complex cases with multiple options
["1,234.56", 1234.56, { groupChar: "," }],
["1.234,56", 1234.56, { groupChar: ".", decimalChar: "," }],
["$1,234.56", null, { bareNumber: true, groupChar: "," }],
["$1,234.56", 1234.56, { bareNumber: false, groupChar: "," }],
["1,234.56$", 1234.56, { bareNumber: false, groupChar: "," }],
[
"1.234,56 €",
1234.56,
{ bareNumber: false, groupChar: ".", decimalChar: "," },
],
])("$0 -> $1 $2", async (cell, value, options) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [{ name: "name", type: "number", ...options }],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.getColumn("name").get(0)).toEqual(value);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9maWVsZC90eXBlcy9udW1iZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sdUJBQXVCO1FBQ3ZCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDZCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLHNDQUFzQztRQUN0QyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNsQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFFcEIsMEJBQTBCO1FBQzFCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFDZCxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFFbEIsMkJBQTJCO1FBQzNCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM5QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDckMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNyQyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFNUMsNkJBQTZCO1FBQzdCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVwQyx1QkFBdUI7UUFDdkIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNwQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUQ7WUFDRSxZQUFZO1lBQ1osTUFBTTtZQUNOLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7U0FDeEQ7UUFDRDtZQUNFLFlBQVk7WUFDWixNQUFNO1lBQ04sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtTQUN4RDtRQUVELHNDQUFzQztRQUN0QyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDM0QsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDekQsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDN0QsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDN0Q7WUFDRSxZQUFZO1lBQ1osT0FBTztZQUNQLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7U0FDeEQ7S0FDRixDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQy9DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBaUIsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1NBQ2hFLENBQUE7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YUZyYW1lIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHByb2Nlc3NUYWJsZSB9IGZyb20gXCIuLi8uLi90YWJsZS9pbmRleC50c1wiXG5cbmRlc2NyaWJlKFwicGFyc2VOdW1iZXJGaWVsZFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIC8vIEJhc2ljIG51bWJlciBwYXJzaW5nXG4gICAgW1wiMVwiLCAxLjAsIHt9XSxcbiAgICBbXCIyXCIsIDIuMCwge31dLFxuICAgIFtcIjEwMDBcIiwgMTAwMC4wLCB7fV0sXG4gICAgW1wiMS41XCIsIDEuNSwge31dLFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXM6IHRlc3RzXG4gICAgW1wiMy4xNDE1OVwiLCAzLjE0MTU5LCB7fV0sXG4gICAgW1wiLTQyXCIsIC00Mi4wLCB7fV0sXG4gICAgW1wiLTMuMTRcIiwgLTMuMTQsIHt9XSxcblxuICAgIC8vIEVtcHR5IG9yIGludmFsaWQgdmFsdWVzXG4gICAgW1wiXCIsIG51bGwsIHt9XSxcbiAgICBbXCJiYWRcIiwgbnVsbCwge31dLFxuICAgIFtcInRleHRcIiwgbnVsbCwge31dLFxuXG4gICAgLy8gR3JvdXAgY2hhcmFjdGVyIGhhbmRsaW5nXG4gICAgW1wiMVwiLCAxLjAsIHsgZ3JvdXBDaGFyOiBcIixcIiB9XSxcbiAgICBbXCIxLDAwMFwiLCAxMDAwLjAsIHsgZ3JvdXBDaGFyOiBcIixcIiB9XSxcbiAgICBbXCIxLDAwMCwwMDBcIiwgMTAwMDAwMC4wLCB7IGdyb3VwQ2hhcjogXCIsXCIgfV0sXG4gICAgW1wiMSAwMDBcIiwgMTAwMC4wLCB7IGdyb3VwQ2hhcjogXCIgXCIgfV0sXG4gICAgW1wiMSMwMDAjMDAwXCIsIDEwMDAwMDAuMCwgeyBncm91cENoYXI6IFwiI1wiIH1dLFxuXG4gICAgLy8gRGVjaW1hbCBjaGFyYWN0ZXIgaGFuZGxpbmdcbiAgICBbXCIxLjVcIiwgMS41LCB7IGRlY2ltYWxDaGFyOiBcIi5cIiB9XSxcbiAgICBbXCIxLDVcIiwgMS41LCB7IGRlY2ltYWxDaGFyOiBcIixcIiB9XSxcbiAgICBbXCIzLDE0XCIsIDMuMTQsIHsgZGVjaW1hbENoYXI6IFwiLFwiIH1dLFxuICAgIFtcIjMuMTRcIiwgMy4xNCwgeyBkZWNpbWFsQ2hhcjogXCIuXCIgfV0sXG5cbiAgICAvLyBCYXJlIG51bWJlciBoYW5kbGluZ1xuICAgIFtcIjEuNVwiLCAxLjUsIHsgYmFyZU51bWJlcjogdHJ1ZSB9XSxcbiAgICBbXCIkMS41XCIsIG51bGwsIHsgYmFyZU51bWJlcjogdHJ1ZSB9XSxcbiAgICBbXCIxLjUlXCIsIG51bGwsIHsgYmFyZU51bWJlcjogdHJ1ZSB9XSxcbiAgICBbXCIkMS41XCIsIDEuNSwgeyBiYXJlTnVtYmVyOiBmYWxzZSB9XSxcbiAgICBbXCIxLjUlXCIsIDEuNSwgeyBiYXJlTnVtYmVyOiBmYWxzZSB9XSxcbiAgICBbXCIkMSwwMDAuMDBcIiwgbnVsbCwgeyBiYXJlTnVtYmVyOiB0cnVlIH1dLFxuICAgIFtcIiQxLDAwMC4wMFwiLCAxMDAwLjAsIHsgYmFyZU51bWJlcjogZmFsc2UsIGdyb3VwQ2hhcjogXCIsXCIgfV0sXG4gICAgW1xuICAgICAgXCLigqwgMS4wMDAsMDBcIixcbiAgICAgIDEwMDAuMCxcbiAgICAgIHsgYmFyZU51bWJlcjogZmFsc2UsIGdyb3VwQ2hhcjogXCIuXCIsIGRlY2ltYWxDaGFyOiBcIixcIiB9LFxuICAgIF0sXG4gICAgW1xuICAgICAgXCIxLjAwMCwwMCDigqxcIixcbiAgICAgIDEwMDAuMCxcbiAgICAgIHsgYmFyZU51bWJlcjogZmFsc2UsIGdyb3VwQ2hhcjogXCIuXCIsIGRlY2ltYWxDaGFyOiBcIixcIiB9LFxuICAgIF0sXG5cbiAgICAvLyBDb21wbGV4IGNhc2VzIHdpdGggbXVsdGlwbGUgb3B0aW9uc1xuICAgIFtcIjEsMjM0LjU2XCIsIDEyMzQuNTYsIHsgZ3JvdXBDaGFyOiBcIixcIiB9XSxcbiAgICBbXCIxLjIzNCw1NlwiLCAxMjM0LjU2LCB7IGdyb3VwQ2hhcjogXCIuXCIsIGRlY2ltYWxDaGFyOiBcIixcIiB9XSxcbiAgICBbXCIkMSwyMzQuNTZcIiwgbnVsbCwgeyBiYXJlTnVtYmVyOiB0cnVlLCBncm91cENoYXI6IFwiLFwiIH1dLFxuICAgIFtcIiQxLDIzNC41NlwiLCAxMjM0LjU2LCB7IGJhcmVOdW1iZXI6IGZhbHNlLCBncm91cENoYXI6IFwiLFwiIH1dLFxuICAgIFtcIjEsMjM0LjU2JFwiLCAxMjM0LjU2LCB7IGJhcmVOdW1iZXI6IGZhbHNlLCBncm91cENoYXI6IFwiLFwiIH1dLFxuICAgIFtcbiAgICAgIFwiMS4yMzQsNTYg4oKsXCIsXG4gICAgICAxMjM0LjU2LFxuICAgICAgeyBiYXJlTnVtYmVyOiBmYWxzZSwgZ3JvdXBDaGFyOiBcIi5cIiwgZGVjaW1hbENoYXI6IFwiLFwiIH0sXG4gICAgXSxcbiAgXSkoXCIkMCAtPiAkMSAkMlwiLCBhc3luYyAoY2VsbCwgdmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7IG5hbWU6IFtjZWxsXSB9KS5sYXp5KClcbiAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFt7IG5hbWU6IFwibmFtZVwiLCB0eXBlOiBcIm51bWJlclwiIGFzIGNvbnN0LCAuLi5vcHRpb25zIH1dLFxuICAgIH1cblxuICAgIGNvbnN0IGxkZiA9IGF3YWl0IHByb2Nlc3NUYWJsZSh0YWJsZSwgeyBzY2hlbWEgfSlcbiAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgIGV4cGVjdChkZi5nZXRDb2x1bW4oXCJuYW1lXCIpLmdldCgwKSkudG9FcXVhbCh2YWx1ZSlcbiAgfSlcbn0pXG4iXX0=