Skip to content

Commit

Permalink
chore: increase nodejs code cov (#2200)
Browse files Browse the repository at this point in the history
  • Loading branch information
universalmind303 committed Dec 28, 2021
1 parent e66d7c9 commit f108a4d
Show file tree
Hide file tree
Showing 14 changed files with 481 additions and 362 deletions.
1 change: 1 addition & 0 deletions nodejs-polars/__tests__/dataframe.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import pl from "@polars";
import {Stream} from "stream";
import fs from "fs";

describe("dataframe", () => {
const df = pl.DataFrame([
pl.Series("foo", [1, 2, 9], pl.Int16),
Expand Down
93 changes: 89 additions & 4 deletions nodejs-polars/__tests__/expr.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {df} from "./setup";
import pl, {col, lit, quantile} from "@polars/index";
import pl, {col, lit} from "@polars/index";

describe("expr", () => {
test("abs", () => {
Expand Down Expand Up @@ -254,6 +254,20 @@ describe("expr", () => {
const actual = df.withColumn(lit(other).extend({value: null, n: 2}));
expect(actual).toFrameEqual(expected);
});
test("extend:positional", () => {
const df = pl.DataFrame({
a: [1, 2, 3, 4, 5],
b: [2, 3, 4, 5, 6]
});
const other = pl.Series("c", ["a", "b", "c"]);
const expected = pl.DataFrame({
a: [1, 2, 3, 4, 5],
b: [2, 3, 4, 5, 6],
c: ["a", "b", "c", "foo", "foo"]
});
const actual = df.withColumn(lit(other).extend("foo", 2));
expect(actual).toFrameEqual(expected);
});
test.each`
replacement | filled
${lit(1)} | ${1}
Expand Down Expand Up @@ -346,7 +360,7 @@ describe("expr", () => {
test.each`
args | hashValue
${[0]} | ${6340063056640878722n}
${[1n, 1]} | ${9788354747012366704n}
${[{k0: 1n, k1: 1}]} | ${9788354747012366704n}
`("$# hash", ({args, hashValue}) => {
const df = pl.DataFrame({"a": [1]});
const expected = pl.DataFrame({"hash": [hashValue]});
Expand Down Expand Up @@ -826,7 +840,7 @@ describe("expr", () => {
const actual = df.withColumns(
col("a")
.cast(pl.UInt64)
.rollingSkew({windowSize: 4})
.rollingSkew(4)
.cast(pl.Utf8) // casted to string to retain precision when extracting to JS
.as("bias_true"),
col("a")
Expand Down Expand Up @@ -1377,7 +1391,68 @@ describe("expr.str", () => {
expect(actual).toFrameEqual(expected);
expect(seriesActual).toFrameEqual(expected);
});

test("rstrip", () => {
const df = pl.DataFrame({
"os": [
"Kali-Linux ",
"Debian-Linux ",
"Ubuntu-Linux ",
"Mac-Sierra"
]
});
const expected = pl.DataFrame({
"os": [
"Kali-Linux",
"Debian-Linux",
"Ubuntu-Linux",
"Mac-Sierra"
]
});
const seriesActual = df.getColumn("os")
.str
.rstrip()
.rename("os")
.toFrame();
const actual = df.select(
col("os")
.str
.rstrip()
.as("os")
);
expect(actual).toFrameEqual(expected);
expect(seriesActual).toFrameEqual(expected);
});
test("lstrip", () => {
const df = pl.DataFrame({
"os": [
" Kali-Linux",
" Debian-Linux",
" Ubuntu-Linux",
"Mac-Sierra"
]
});
const expected = pl.DataFrame({
"os": [
"Kali-Linux",
"Debian-Linux",
"Ubuntu-Linux",
"Mac-Sierra"
]
});
const seriesActual = df.getColumn("os")
.str
.lstrip()
.rename("os")
.toFrame();
const actual = df.select(
col("os")
.str
.lstrip()
.as("os")
);
expect(actual).toFrameEqual(expected);
expect(seriesActual).toFrameEqual(expected);
});
});
describe("expr.lst", () => {
test("get", () => {
Expand Down Expand Up @@ -1663,3 +1738,13 @@ describe("expr.dt", () => {
expect(actualFromSeries).toFrameEqual(expected);
});
});
describe("expr metadata", () => {
test("inspect & toString", () => {
const expr = lit("foo");
const expected = "Utf8(foo)";
const actualInspect = expr[Symbol.for("nodejs.util.inspect.custom")]();
const exprString = expr.toString();
expect(actualInspect).toStrictEqual(expected);
expect(exprString).toStrictEqual(expected);
});
});
136 changes: 134 additions & 2 deletions nodejs-polars/__tests__/series.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,6 @@ describe("series", () => {
});
});
});

describe("series", () => {
const numSeries = () => pl.Series("foo", [1, 2, 3], pl.Int32);
const fltSeries = () => pl.Series("float", [1, 2, 3], pl.Float64);
Expand All @@ -358,6 +357,7 @@ describe("series", () => {
it.each`
series | method | args
${numSeries()} | ${"abs"} | ${[]}
${numSeries()} | ${"as"} | ${[chance.string()]}
${numSeries()} | ${"alias"} | ${[chance.string()]}
${numSeries()} | ${"append"} | ${[other()]}
${numSeries()} | ${"argMax"} | ${[]}
Expand Down Expand Up @@ -537,6 +537,7 @@ describe("series", () => {
${"name"} | ${pl.Series("a", ["foo"]).name} | ${"a"}
${"length"} | ${pl.Series([1, 2, 3, 4]).length} | ${4}
${"abs"} | ${pl.Series([1, 2, -3]).abs()} | ${pl.Series([1, 2, 3])}
${"alias"} | ${pl.Series([1, 2, 3]).as("foo")} | ${pl.Series("foo", [1, 2, 3])}
${"alias"} | ${pl.Series([1, 2, 3]).alias("foo")} | ${pl.Series("foo", [1, 2, 3])}
${"argMax"} | ${pl.Series([1, 2, 3]).argMax()} | ${2}
${"argMin"} | ${pl.Series([1, 2, 3]).argMin()} | ${0}
Expand Down Expand Up @@ -667,14 +668,145 @@ describe("series", () => {
`("$# $name throws an error ", ({fn, errorType}) => {
expect(fn).toThrow(errorType);
});
test("reinterpret", () => {
const s = pl.Series("reinterpret", [1n, 2n], pl.Int64);
const unsignedExpected = pl.Series("reinterpret", [1n, 2n], pl.UInt64);
const signedExpected = pl.Series("reinterpret", [1n, 2n], pl.Int64);
const unsigned = s.reinterpret(false);
const signed = unsigned.reinterpret(true);

expect(unsigned).toSeriesStrictEqual(unsignedExpected);
expect(signed).toSeriesStrictEqual(signedExpected);
});
test("reinterpret:invalid", () => {
const s = pl.Series("reinterpret", [1, 2]);
const fn = () => s.reinterpret();
expect(fn).toThrow();
});
test("extend", () => {
const s = pl.Series("extended", [1], pl.UInt16);
const expected = pl.Series("extended", [1, null, null], pl.UInt16);
const actual = s.extend(null, 2);
expect(actual).toSeriesStrictEqual(expected);
});
test("round invalid", () => {
const s = pl.Series([true, false]);
const fn = () => s.round(2);
expect(fn).toThrow();
});
test("round:positional", () => {
const s = pl.Series([1.1111, 2.2222]);
const expected = pl.Series([1.11, 2.22]);
const actual = s.round(2);
expect(actual).toSeriesEqual(expected);
});
test("round:named", () => {
const s = pl.Series([1.1111, 2.2222]);
const expected = pl.Series([1.11, 2.22]);
const actual = s.round({decimals: 2});
expect(actual).toSeriesEqual(expected);
});
});
describe("comparators & math", () => {
test("add/plus", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([2, 3]);
expect(s.add(1)).toSeriesEqual(expected);
expect(s.plus(1)).toSeriesEqual(expected);
});
test("sub/minus", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([0, 1]);
expect(s.sub(1)).toSeriesEqual(expected);
expect(s.minus(1)).toSeriesEqual(expected);
});
test("mul/times", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([10, 20]);
expect(s.mul(10)).toSeriesEqual(expected);
expect(s.times(10)).toSeriesEqual(expected);
});
test("div/divideBy", () => {
const s = pl.Series([2, 4]);
const expected = pl.Series([1, 2]);
expect(s.div(2)).toSeriesEqual(expected);
expect(s.divideBy(2)).toSeriesEqual(expected);
});
test("div/divideBy", () => {
const s = pl.Series([2, 4]);
const expected = pl.Series([1, 2]);
expect(s.div(2)).toSeriesEqual(expected);
expect(s.divideBy(2)).toSeriesEqual(expected);
});
test("rem/modulo", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([1, 0]);
expect(s.rem(2)).toSeriesEqual(expected);
expect(s.modulo(2)).toSeriesEqual(expected);
});
test("eq/equals", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([true, false]);
expect(s.eq(1)).toSeriesEqual(expected);
expect(s.equals(1)).toSeriesEqual(expected);
});
test("neq/notEquals", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([false, true]);
expect(s.neq(1)).toSeriesEqual(expected);
expect(s.notEquals(1)).toSeriesEqual(expected);
});
test("gt/greaterThan", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([false, true]);
expect(s.gt(1)).toSeriesEqual(expected);
expect(s.greaterThan(1)).toSeriesEqual(expected);
});
test("gtEq/equals", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([true, true]);
expect(s.gtEq(1)).toSeriesEqual(expected);
expect(s.greaterThanEquals(1)).toSeriesEqual(expected);
});
test("lt/lessThan", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([false, false]);
expect(s.lt(1)).toSeriesEqual(expected);
expect(s.lessThan(1)).toSeriesEqual(expected);
});
test("ltEq/lessThanEquals", () => {
const s = pl.Series([1, 2]);
const expected = pl.Series([true, false]);
expect(s.ltEq(1)).toSeriesEqual(expected);
expect(s.lessThanEquals(1)).toSeriesEqual(expected);
});
});
describe("series proxy & metadata", () => {
test("toString & inspect", () => {
const s = pl.Series("foo", [1, 2, 3]);
const sString = s.toString();
const inspectString = s[Symbol.for("nodejs.util.inspect.custom")]();
const expected = "shape: (3,)\nSeries: 'foo' [f64]\n[\n\t1\n\t2\n\t3\n]";
expect(sString).toStrictEqual(expected);
expect(inspectString).toStrictEqual(expected);
});
test("stringTag", () => {
const s = pl.Series([1]);
const t = s[Symbol.toStringTag];
expect(t).toStrictEqual("Series");
});
test("get", () => {
const s = pl.Series([2, 3, 9, -1]);
const [two,, nine] = s;
expect(two).toStrictEqual(2);
expect(nine).toStrictEqual(9);
});
test("set", () => {
const s = pl.Series([1, 2, 3]);
s[0] = s[2];
expect(s[0]).toStrictEqual(s[2]);
});
});

describe("StringFunctions", () => {
it.each`
name | actual | expected
Expand Down
2 changes: 1 addition & 1 deletion nodejs-polars/jest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default {
preset: "ts-jest",
testEnvironment: "node",
clearMocks: true,
collectCoverage: false,
collectCoverage: true,
moduleDirectories: ["node_modules", "./polars"],
moduleFileExtensions: ["js", "ts"],
setupFilesAfterEnv : ["<rootDir>/__tests__/setup.ts"],
Expand Down
57 changes: 28 additions & 29 deletions nodejs-polars/polars/cfg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,38 @@ export interface Config {
/** Turn off the global string cache */
unsetGlobalStringCache(): Config
}
export const Config = (): Config => {
return {
setUtf8Tables() {
process.env["POLARS_FMT_NO_UTF8"] = undefined;
export const Config = {
setUtf8Tables() {
delete process.env["POLARS_FMT_NO_UTF8"];

return this;
},
setAsciiTables() {
process.env["POLARS_FMT_NO_UTF8"] = "1";
return this;
},
setAsciiTables() {
process.env["POLARS_FMT_NO_UTF8"] = "1";

return this;
},
setTblWidthChars(width) {
process.env["POLARS_TABLE_WIDTH"] = String(width);
return this;
},
setTblWidthChars(width) {

return this;
},
setTblRows(n) {
process.env["POLARS_FMT_MAX_ROWS"] = String(n);
process.env["POLARS_TABLE_WIDTH"] = String(width);

return this;
},
setTblCols(n) {
process.env["POLARS_FMT_MAX_COLS"] = String(n);
return this;
},
setTblRows(n) {
process.env["POLARS_FMT_MAX_ROWS"] = String(n);

return this;
},
setGlobalStringCache() {
return this;
},
unsetGlobalStringCache() {
return this;
}
return this;
},
setTblCols(n) {
process.env["POLARS_FMT_MAX_COLS"] = String(n);

return this;
},
setGlobalStringCache() {
return this;
},
unsetGlobalStringCache() {
return this;
}

};
};

0 comments on commit f108a4d

Please sign in to comment.