qrloop
Version:
Envelop big blob of data into frames that can be displayed in series of QR Codes
40 lines • 2.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const __1 = require("..");
test("'hello world' with 4 replicas", () => {
const str = "hello world";
const framesExport = (0, __1.dataToFrames)(Buffer.from(str), 200, 4);
const firstScanned = (0, __1.parseFramesReducer)(null, framesExport[0]);
expect((0, __1.areFramesComplete)(firstScanned)).toBe(true);
expect((0, __1.progressOfFrames)(firstScanned)).toBe(1);
expect((0, __1.currentNumberOfFrames)(firstScanned)).toBe((0, __1.totalNumberOfFrames)(firstScanned));
expect((0, __1.framesToData)(firstScanned).toString()).toBe(str);
const secondScanned = (0, __1.parseFramesReducer)(null, framesExport[1]);
expect((0, __1.areFramesComplete)(secondScanned)).toBe(true);
expect((0, __1.progressOfFrames)(secondScanned)).toBe(1);
expect((0, __1.currentNumberOfFrames)(secondScanned)).toBe((0, __1.totalNumberOfFrames)(secondScanned));
expect((0, __1.framesToData)(secondScanned).toString()).toBe(str);
const allScanned = framesExport.reduce(__1.parseFramesReducer, undefined);
expect((0, __1.areFramesComplete)(allScanned)).toBe(true);
expect((0, __1.progressOfFrames)(allScanned)).toBe(1);
expect((0, __1.currentNumberOfFrames)(allScanned)).toBe((0, __1.totalNumberOfFrames)(allScanned));
expect((0, __1.framesToData)(allScanned).toString()).toBe(str);
});
test("1/3 of the frames dropped in the middle is enough to recover with at least 3 replicas", () => {
const data = Buffer.from(Array(1000)
.fill(null)
.map((_, i) => i % 256));
for (let replicas = 3; replicas < 10; replicas++) {
let framesExport = (0, __1.dataToFrames)(data, 40, replicas);
// drop 1/3 of the frames in the middle
framesExport = framesExport
.slice(0, Math.ceil(framesExport.length / 3))
.concat(framesExport.slice(Math.floor((2 * framesExport.length) / 3)));
const framesImport = framesExport.reduce(__1.parseFramesReducer, undefined);
expect((0, __1.areFramesComplete)(framesImport)).toBe(true);
expect((0, __1.progressOfFrames)(framesImport)).toBe(1);
expect((0, __1.currentNumberOfFrames)(framesImport)).toBe((0, __1.totalNumberOfFrames)(framesImport));
expect((0, __1.framesToData)(framesImport).toString("hex")).toBe(data.toString("hex"));
}
});
//# sourceMappingURL=replicas.js.map