@gracexwho/model-card-generator
Version:
Tool for generating model cards for Jupyter Notebook.
134 lines (123 loc) • 4.67 kB
text/typescript
import { Cell } from "../cell";
import { CellSlice } from "../cellslice";
import { SlicedExecution } from "../log-slicer";
import { LocationSet } from "../slice";
import { TestCell } from "./testcell";
describe("SlicedExecution", () => {
function cell(
executionEventId: string,
text: string,
executionCount?: number,
id?: string
): Cell {
if (executionCount === undefined) executionCount = 1;
return new TestCell(text, executionCount, executionEventId, id);
}
function cellSlice(cell: Cell, slice: LocationSet): CellSlice {
return new CellSlice(cell, slice);
}
function location(
first_line: number,
first_column: number,
last_line: number,
last_column: number
) {
return {
first_line: first_line,
first_column: first_column,
last_line: last_line,
last_column: last_column
};
}
function slicedExecution(...cellSlices: CellSlice[]) {
return new SlicedExecution(new Date(), cellSlices);
}
describe("merge", () => {
it("unions slices with different cells", () => {
let slice1 = slicedExecution(
cellSlice(cell("1", "a = 1", 1), new LocationSet(location(1, 0, 1, 5)))
);
let slice2 = slicedExecution(
cellSlice(cell("2", "b = 2", 2), new LocationSet(location(1, 0, 1, 5)))
);
let merged = slice1.merge(slice2);
expect(merged.cellSlices[0].cell.executionEventId).toBe("1");
expect(merged.cellSlices[1].cell.executionEventId).toBe("2");
});
it("will not include the same locations from the same cell twice", () => {
let slice1 = slicedExecution(
cellSlice(cell("1", "a = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let slice2 = slicedExecution(
cellSlice(cell("1", "a = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let merged = slice1.merge(slice2);
expect(merged.cellSlices).toHaveLength(1);
expect(merged.cellSlices[0].slice.size).toBe(1);
});
it(
"considers two cells sharing ID and execution count but differing in execution event " +
"ID to be different",
() => {
let slice1 = slicedExecution(
cellSlice(
cell("1", "a = 1", 1, "id1"),
new LocationSet(location(1, 0, 1, 5))
)
);
let slice2 = slicedExecution(
cellSlice(
cell("2", "a = 1", 1, "id1"),
new LocationSet(location(1, 0, 1, 5))
)
);
let merged = slice1.merge(slice2);
expect(merged.cellSlices.length).toBe(2);
}
);
it("will include complementary ranges from two slices of the same cell", () => {
let slice1 = slicedExecution(
cellSlice(cell("1", "a = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let slice2 = slicedExecution(
cellSlice(cell("1", "a = 1"), new LocationSet(location(1, 0, 1, 4)))
);
let merged = slice1.merge(slice2);
expect(merged.cellSlices).toHaveLength(1);
expect(merged.cellSlices[0].slice.size).toBe(2);
expect(merged.cellSlices[0].slice.items).toContainEqual(
location(1, 0, 1, 5)
);
expect(merged.cellSlices[0].slice.items).toContainEqual(
location(1, 0, 1, 4)
);
});
it("reorders the cells in execution order", () => {
let slice1 = slicedExecution(
cellSlice(cell("2", "a = 1", 2), new LocationSet(location(1, 0, 1, 5)))
);
let slice2 = slicedExecution(
cellSlice(cell("1", "a = 1", 1), new LocationSet(location(1, 0, 1, 4)))
);
let merged = slice1.merge(slice2);
expect(merged.cellSlices[0].cell.executionCount).toBe(1);
expect(merged.cellSlices[1].cell.executionCount).toBe(2);
});
it("can do an n-way merge with a bunch of cells", () => {
let slice1 = slicedExecution(
cellSlice(cell("1", "a = 1"), new LocationSet(location(1, 0, 1, 5))),
cellSlice(cell("2", "b = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let slice2 = slicedExecution(
cellSlice(cell("3", "c = 1"), new LocationSet(location(1, 0, 1, 5))),
cellSlice(cell("4", "d = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let slice3 = slicedExecution(
cellSlice(cell("5", "e = 1"), new LocationSet(location(1, 0, 1, 5))),
cellSlice(cell("6", "f = 1"), new LocationSet(location(1, 0, 1, 5)))
);
let merged = slice1.merge(slice2, slice3);
expect(merged.cellSlices).toHaveLength(6);
});
});
});