|
@@ -0,0 +1,166 @@
|
|
|
+describe("Basic functions", () => {
|
|
|
+ const workbook = createWorkbook();
|
|
|
+ const sheet = createSheet(workbook, "Sheet 1");
|
|
|
+ sheet.makeCurrent();
|
|
|
+
|
|
|
+ sheet.setCell("A", 0, "0");
|
|
|
+ sheet.setCell("A", 1, "1");
|
|
|
+ sheet.setCell("A", 2, "2");
|
|
|
+
|
|
|
+ test("select", () => {
|
|
|
+ expect(select).toBeDefined();
|
|
|
+ expect(select(true, 1, 2)).toBe(1);
|
|
|
+ expect(select(false, 1, 2)).toBe(2);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("choose", () => {
|
|
|
+ expect(choose).toBeDefined();
|
|
|
+ expect(choose(0, 1, 2, 3)).toBe(1);
|
|
|
+ expect(choose(1, 1, 2, 3)).toBe(2);
|
|
|
+ expect(choose(3, 1, 2, 3)).toBeUndefined();
|
|
|
+ expect(choose(-1, 1, 2, 3)).toBeUndefined();
|
|
|
+ });
|
|
|
+
|
|
|
+ test("now", () => {
|
|
|
+ expect(now).toBeDefined();
|
|
|
+ expect(now()).toBeInstanceOf(Date);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("randRange", () => {
|
|
|
+ expect(randRange).toBeDefined();
|
|
|
+ });
|
|
|
+
|
|
|
+ test("integer", () => {
|
|
|
+ expect(integer).toBeDefined();
|
|
|
+ expect(integer("0")).toEqual(0);
|
|
|
+ expect(integer("32")).toEqual(32);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("sheet", () => {
|
|
|
+ expect(globalThis.sheet).toBeDefined();
|
|
|
+ expect(globalThis.sheet("Sheet 1")).toBe(sheet);
|
|
|
+ expect(globalThis.sheet("Not a sheet")).toBeUndefined();
|
|
|
+ });
|
|
|
+
|
|
|
+ test("reduce", () => {
|
|
|
+ expect(reduce).toBeDefined();
|
|
|
+ expect(reduce(acc => acc + 1, 0, [1, 2, 3, 4])).toEqual(4);
|
|
|
+ expect(reduce(acc => acc + 1, 0, [])).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("numericReduce", () => {
|
|
|
+ expect(numericReduce).toBeDefined();
|
|
|
+ expect(numericReduce(acc => acc + 1, 0, [1, 2, 3, 4])).toEqual(4);
|
|
|
+ expect(numericReduce(acc => acc + 1, 0, [])).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("numericResolve", () => {
|
|
|
+ expect(numericResolve).toBeDefined();
|
|
|
+ expect(numericResolve(["A0", "A1", "A2"])).toEqual([0, 1, 2]);
|
|
|
+ expect(numericResolve([])).toEqual([]);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("resolve", () => {
|
|
|
+ expect(resolve).toBeDefined();
|
|
|
+ expect(resolve(["A0", "A1", "A2"])).toEqual(["0", "1", "2"]);
|
|
|
+ expect(resolve([])).toEqual([]);
|
|
|
+ });
|
|
|
+});
|
|
|
+
|
|
|
+describe("Statistics", () => {
|
|
|
+ const workbook = createWorkbook();
|
|
|
+ const sheet = createSheet(workbook, "Sheet 1");
|
|
|
+ sheet.makeCurrent();
|
|
|
+
|
|
|
+ for (let i = 0; i < 10; ++i) sheet.setCell("A", i, `${i}`);
|
|
|
+
|
|
|
+ test("sum", () => {
|
|
|
+ expect(sum).toBeDefined();
|
|
|
+ expect(sum(R`A0:A9`)).toEqual(45);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("sumIf", () => {
|
|
|
+ expect(sumIf).toBeDefined();
|
|
|
+ expect(sumIf(x => !Number.isNaN(x), R`A0:A10`)).toEqual(45);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("count", () => {
|
|
|
+ expect(count).toBeDefined();
|
|
|
+ expect(count(R`A0:A9`)).toEqual(10);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("countIf", () => {
|
|
|
+ expect(countIf).toBeDefined();
|
|
|
+ expect(countIf(x => x, R`A0:A10`)).toEqual(10);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("average", () => {
|
|
|
+ expect(average).toBeDefined();
|
|
|
+ expect(average(R`A0:A9`)).toEqual(4.5);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("averageIf", () => {
|
|
|
+ expect(averageIf).toBeDefined();
|
|
|
+ expect(averageIf(x => !Number.isNaN(x), R`A0:A10`)).toEqual(4.5);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("median", () => {
|
|
|
+ expect(median).toBeDefined();
|
|
|
+ expect(median(R`A0:A9`)).toEqual(4.5);
|
|
|
+ expect(median(R`A0:A2`)).toEqual(1);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("variance", () => {
|
|
|
+ expect(variance).toBeDefined();
|
|
|
+ expect(variance(R`A0:A0`)).toEqual(0);
|
|
|
+ expect(variance(R`A0:A9`)).toEqual(82.5);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("mode", () => {
|
|
|
+ expect(mode).toBeDefined();
|
|
|
+ expect(mode(R`A0:A0`.union(R`A0:A0`).union(R`A1:A9`))).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("stddev", () => {
|
|
|
+ expect(stddev).toBeDefined();
|
|
|
+ expect(stddev(R`A0:A0`)).toEqual(0);
|
|
|
+ expect(stddev(R`A0:A9`)).toEqual(Math.sqrt(82.5));
|
|
|
+ });
|
|
|
+});
|
|
|
+
|
|
|
+describe("Lookup", () => {
|
|
|
+ const workbook = createWorkbook();
|
|
|
+ const sheet = createSheet(workbook, "Sheet 1");
|
|
|
+ sheet.makeCurrent();
|
|
|
+
|
|
|
+ for (let i = 0; i < 10; ++i) {
|
|
|
+ sheet.setCell("A", i, `${i}`);
|
|
|
+ sheet.setCell("B", i, `B${i}`);
|
|
|
+ }
|
|
|
+
|
|
|
+ sheet.focusCell("A", 0);
|
|
|
+
|
|
|
+ test("row", () => {
|
|
|
+ expect(row()).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ test("column", () => {
|
|
|
+ expect(column()).toEqual("A");
|
|
|
+ });
|
|
|
+
|
|
|
+ test("lookup", () => {
|
|
|
+ expect(lookup).toBeDefined();
|
|
|
+ // Note: String ordering.
|
|
|
+ expect(lookup("2", R`A0:A9`, R`B0:B9`)).toEqual("B2");
|
|
|
+ expect(lookup("20", R`A0:A9`, R`B0:B9`)).toBeUndefined();
|
|
|
+ expect(lookup("80", R`A0:A9`, R`B0:B9`, undefined, "nextlargest")).toEqual("B9");
|
|
|
+ });
|
|
|
+
|
|
|
+ test("reflookup", () => {
|
|
|
+ expect(reflookup).toBeDefined();
|
|
|
+ // Note: String ordering.
|
|
|
+ expect(reflookup("2", R`A0:A9`, R`B0:B9`).name).toEqual("B2");
|
|
|
+ expect(reflookup("20", R`A0:A9`, R`B0:B9`)).toEqual(here());
|
|
|
+ expect(reflookup("80", R`A0:A9`, R`B0:B9`, undefined, "nextlargest").name).toEqual("B9");
|
|
|
+ });
|
|
|
+});
|