mirror of
https://github.com/logos-storage/nim-leopard.git
synced 2026-01-02 13:43:08 +00:00
add tests to reuse same encoder/decoder
This commit is contained in:
parent
b60c3bc288
commit
93a3bbcde2
@ -67,47 +67,40 @@ proc testPackets*(
|
||||
parity,
|
||||
bufSize,
|
||||
dataLosses: int,
|
||||
parityLosses: int): Result[void, cstring] =
|
||||
parityLosses: int,
|
||||
encoder: var LeoEncoder,
|
||||
decoder: var LeoDecoder): Result[void, cstring] =
|
||||
|
||||
var
|
||||
dataBuf = newSeqOfCap[seq[byte]](buffers)
|
||||
parityBuf = newSeqOfCap[seq[byte]](parity)
|
||||
recoveredBuf = newSeqOfCap[seq[byte]](buffers)
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
|
||||
try:
|
||||
encoder = ? LeoEncoder.init(bufSize, buffers, parity)
|
||||
decoder = ? LeoDecoder.init(bufSize, buffers, parity)
|
||||
for _ in 0..<buffers:
|
||||
var
|
||||
dataSeq = newSeq[byte](bufSize)
|
||||
|
||||
for _ in 0..<buffers:
|
||||
var
|
||||
dataSeq = newSeq[byte](bufSize)
|
||||
randomCRCPacket(dataSeq)
|
||||
dataBuf.add(dataSeq)
|
||||
|
||||
randomCRCPacket(dataSeq)
|
||||
dataBuf.add(dataSeq)
|
||||
recoveredBuf.add(newSeq[byte](bufSize))
|
||||
|
||||
recoveredBuf.add(newSeq[byte](bufSize))
|
||||
for _ in 0..<parity:
|
||||
parityBuf.add(newSeq[byte](bufSize))
|
||||
|
||||
for _ in 0..<parity:
|
||||
parityBuf.add(newSeq[byte](bufSize))
|
||||
encoder.encode(dataBuf, parityBuf).tryGet()
|
||||
|
||||
encoder.encode(dataBuf, parityBuf).tryGet()
|
||||
if dataLosses > 0:
|
||||
dropRandomIdx(dataBuf, dataLosses)
|
||||
|
||||
if dataLosses > 0:
|
||||
dropRandomIdx(dataBuf, dataLosses)
|
||||
if parityLosses > 0:
|
||||
dropRandomIdx(parityBuf, parityLosses)
|
||||
|
||||
if parityLosses > 0:
|
||||
dropRandomIdx(parityBuf, parityLosses)
|
||||
decoder.decode(dataBuf, parityBuf, recoveredBuf).tryGet()
|
||||
|
||||
decoder.decode(dataBuf, parityBuf, recoveredBuf).tryGet()
|
||||
|
||||
for i, d in dataBuf:
|
||||
if d.len <= 0:
|
||||
if not checkCRCPacket(recoveredBuf[i]):
|
||||
return err(("Check failed for packet " & $i).cstring)
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
for i, d in dataBuf:
|
||||
if d.len <= 0:
|
||||
if not checkCRCPacket(recoveredBuf[i]):
|
||||
return err(("Check failed for packet " & $i).cstring)
|
||||
|
||||
ok()
|
||||
|
||||
@ -145,28 +145,177 @@ suite "Leopard simple Encode/Decode":
|
||||
|
||||
suite "Leopard Encode/Decode":
|
||||
test "bufSize = 4096, K = 800, M = 200 - drop data = 200 data":
|
||||
testPackets(800, 200, 4096, 200, 0).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 800
|
||||
parity = 200
|
||||
bufSize = 4096
|
||||
dataLoses = 200
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, 0, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 800, M = 200 - drop parity = 200":
|
||||
testPackets(800, 200, 4096, 0, 200).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 800
|
||||
parity = 200
|
||||
bufSize = 4096
|
||||
parityLoses = 200
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, parityLoses, 0, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 800, M = 200 - drop data = 100, drop parity = 100":
|
||||
testPackets(800, 200, 4096, 0, 200).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 800
|
||||
parity = 200
|
||||
bufSize = 4096
|
||||
dataLoses = 100
|
||||
parityLoses = 100
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 2000 - drop data = 2000":
|
||||
testPackets(8000, 2000, 4096, 2000, 0).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 2000
|
||||
bufSize = 4096
|
||||
dataLoses = 2000
|
||||
parityLoses = 0
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 2000 - drop parity = 2000":
|
||||
testPackets(8000, 2000, 4096, 0, 2000).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 2000
|
||||
bufSize = 4096
|
||||
dataLoses = 0
|
||||
parityLoses = 2000
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 2000 - drop data = 1000, parity = 1000":
|
||||
testPackets(8000, 2000, 4096, 1000, 1000).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 2000
|
||||
bufSize = 4096
|
||||
dataLoses = 1000
|
||||
parityLoses = 1000
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 8000 - drop data = 8000":
|
||||
testPackets(8000, 8000, 4096, 8000, 0).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 8000
|
||||
bufSize = 4096
|
||||
dataLoses = 8000
|
||||
parityLoses = 0
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 2000 - drop parity = 8000":
|
||||
testPackets(8000, 8000, 4096, 0, 8000).tryGet()
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 8000 - drop parity = 8000":
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 8000
|
||||
bufSize = 4096
|
||||
dataLoses = 0
|
||||
parityLoses = 8000
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
test "bufSize = 4096, K = 8000, M = 8000 - drop data = 4000, parity = 4000":
|
||||
testPackets(8000, 8000, 4096, 4000, 4000).tryGet()
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
buffers = 8000
|
||||
parity = 8000
|
||||
bufSize = 4096
|
||||
dataLoses = 4000
|
||||
parityLoses = 4000
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(bufSize, buffers, parity).tryGet()
|
||||
decoder = LeoDecoder.init(bufSize, buffers, parity).tryGet()
|
||||
testPackets(buffers, parity, bufSize, dataLoses, parityLoses, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
suite "Leopard use same encoder/decoder multiple times":
|
||||
var
|
||||
encoder: LeoEncoder
|
||||
decoder: LeoDecoder
|
||||
|
||||
try:
|
||||
encoder = LeoEncoder.init(4096, 800, 800).tryGet()
|
||||
decoder = LeoDecoder.init(4096, 800, 800).tryGet()
|
||||
for i in 0..10:
|
||||
let lost = 40 * i
|
||||
test "Encode/Decode using same encoder/decoder - lost data = " & $lost & " lost parity = " & $lost:
|
||||
testPackets(800, 800, 4096, 40 * i, 40 * i, encoder, decoder).tryGet()
|
||||
finally:
|
||||
encoder.free()
|
||||
decoder.free()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user