UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

69 lines 10.3 kB
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=