From 93a3bbcde2938b91a94c4942f36b6b74f751d1e5 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Mon, 28 Mar 2022 15:54:16 -0600 Subject: [PATCH] add tests to reuse same encoder/decoder --- tests/helpers.nim | 49 ++++++------ tests/testleopard.nim | 169 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 180 insertions(+), 38 deletions(-) diff --git a/tests/helpers.nim b/tests/helpers.nim index df93fa4..847e901 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -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.. 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() diff --git a/tests/testleopard.nim b/tests/testleopard.nim index 206ac5a..251af12 100644 --- a/tests/testleopard.nim +++ b/tests/testleopard.nim @@ -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()