|
| 1 | +import { expect, it } from 'vitest' |
| 2 | +import { createDecoder, createEncoder } from '../utils/lt-codes' |
| 3 | + |
| 4 | +function randomBuffer(length: number) { |
| 5 | + return new Uint8Array(length).map(() => Math.floor(Math.random() * 256)) |
| 6 | +} |
| 7 | + |
| 8 | +function createEncoderWithIndices(count: number) { |
| 9 | + const buffer = randomBuffer(count * 100 - 5) |
| 10 | + const encoder = createEncoder(buffer, 100) |
| 11 | + expect(encoder.k).toBe(count) |
| 12 | + |
| 13 | + return { |
| 14 | + buffer, |
| 15 | + encoder, |
| 16 | + } |
| 17 | +} |
| 18 | + |
| 19 | +it('cross-blocks resolving 1', () => { |
| 20 | + const { buffer, encoder } = createEncoderWithIndices(3) |
| 21 | + |
| 22 | + const decoder = createDecoder() |
| 23 | + decoder.addBlock(encoder.createBlock([0, 1, 2])) |
| 24 | + decoder.addBlock(encoder.createBlock([1, 2])) |
| 25 | + // Here we know [0] |
| 26 | + decoder.addBlock(encoder.createBlock([0, 2])) |
| 27 | + |
| 28 | + const data = decoder.getDecoded() |
| 29 | + expect(data).toBeDefined() |
| 30 | + expect(data).toEqual(buffer) |
| 31 | +}) |
| 32 | + |
| 33 | +it('cross-blocks resolving 2', () => { |
| 34 | + const { buffer, encoder } = createEncoderWithIndices(5) |
| 35 | + |
| 36 | + const decoder = createDecoder() |
| 37 | + decoder.addBlock(encoder.createBlock([0, 1, 2, 3, 4])) |
| 38 | + decoder.addBlock(encoder.createBlock([0, 1])) |
| 39 | + expect(decoder.decodedCount).toBe(0) |
| 40 | + // Here we know [0, 1] and [2, 3, 4] |
| 41 | + decoder.addBlock(encoder.createBlock([2, 3])) |
| 42 | + // Here we can have [4] |
| 43 | + expect(decoder.decodedCount).toBe(1) |
| 44 | + decoder.addBlock(encoder.createBlock([1])) |
| 45 | + // Here we can have [0] and [1] |
| 46 | + expect(decoder.decodedCount).toBe(3) |
| 47 | + decoder.addBlock(encoder.createBlock([4])) |
| 48 | + |
| 49 | + const data = decoder.getDecoded() |
| 50 | + expect(data).toBeDefined() |
| 51 | + expect(data).toEqual(buffer) |
| 52 | +}) |
0 commit comments