Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 6x 6x 2747x 2747x 9205x 9475x 1035x 2747x 6x 2746x 2746x 2746x 2746x 2676x 2676x 2676x 40105x 9203x 9203x 9203x 9203x 30902x 9475x 9475x 9475x 9475x 9475x 9475x 9475x 21427x 20392x 20392x 20392x 20392x 20392x 20392x 20392x 20392x 20392x 20392x 1035x 1035x 1035x 1035x 1035x 1035x 1035x 1035x 1035x 1035x 70x 2746x 2746x | import * as line from '../line';
export const assertApply = (src: string[], dst: string[], patch: line.LinePatch) => {
const res = [...src];
line.apply(
patch,
(pos) => {
res.splice(pos, 1);
},
(srcPos, dstPos) => {
res.splice(srcPos + 1, 0, dst[dstPos]);
},
(srcPos, dstPos) => {
res[srcPos] = dst[dstPos];
},
);
expect(res).toEqual(dst);
};
export const assertDiff = (src: string[], dst: string[], diff: line.LinePatch = line.diff(src, dst)) => {
const srcLen = src.length;
const dstLen = dst.length;
const res: string[] = [];
if (diff.length) {
let lastSrcIdx = -1; // last src index consumed by a DEL/EQL/MIX op
let lastDstIdx = -1; // last dst index consumed by an INS/EQL/MIX op
for (const [type, srcIdx, dstIdx] of diff) {
if (type === line.LINE_PATCH_OP_TYPE.DEL) {
expect(srcIdx).toBeGreaterThanOrEqual(0);
expect(srcIdx).toBeLessThan(srcLen);
expect(srcIdx).toBeGreaterThan(lastSrcIdx);
lastSrcIdx = srcIdx;
} else if (type === line.LINE_PATCH_OP_TYPE.INS) {
expect(dstIdx).toBeGreaterThanOrEqual(0);
expect(dstIdx).toBeLessThan(dstLen);
expect(dstIdx).toBeGreaterThan(lastDstIdx);
expect(srcIdx).toBeGreaterThanOrEqual(-1); // insert anchor, -1 inserts at the start
expect(srcIdx).toBeLessThan(srcLen);
lastDstIdx = dstIdx;
res.push(dst[dstIdx]);
} else if (type === line.LINE_PATCH_OP_TYPE.EQL) {
expect(srcIdx).toBeGreaterThanOrEqual(0);
expect(srcIdx).toBeLessThan(srcLen);
expect(dstIdx).toBeGreaterThanOrEqual(0);
expect(dstIdx).toBeLessThan(dstLen);
expect(srcIdx).toBeGreaterThan(lastSrcIdx);
expect(dstIdx).toBeGreaterThan(lastDstIdx);
expect(src[srcIdx]).toBe(dst[dstIdx]);
lastSrcIdx = srcIdx;
lastDstIdx = dstIdx;
res.push(src[srcIdx]);
} else Eif (type === line.LINE_PATCH_OP_TYPE.MIX) {
expect(srcIdx).toBeGreaterThanOrEqual(0);
expect(srcIdx).toBeLessThan(srcLen);
expect(dstIdx).toBeGreaterThanOrEqual(0);
expect(dstIdx).toBeLessThan(dstLen);
expect(srcIdx).toBeGreaterThan(lastSrcIdx);
expect(dstIdx).toBeGreaterThan(lastDstIdx);
lastSrcIdx = srcIdx;
lastDstIdx = dstIdx;
res.push(dst[dstIdx]);
}
}
} else {
res.push(...src);
}
expect(res).toEqual(dst);
assertApply(src, dst, diff);
};
|