import std/random import std/sets import pkg/unittest2 import pkg/results import ../leopard import ./helpers randomize() suite "Leopard Parametrization": test "Should not allow invalid buffer multiples": check: LeoEncoder.init(63, 4, 2).error == "bufSize should be multiples of 64 bytes!" LeoEncoder.init(65, 4, 2).error == "bufSize should be multiples of 64 bytes!" test "Should not allow invalid data/parity buffer counts": check: LeoEncoder.init(64, 1, 2).error == "number of parity buffers cannot exceed number of data buffers!" test "Should not allow data + parity to exceed 65536": check: LeoEncoder.init(64, 65536 + 1, 0).error == "number of parity and data buffers cannot exceed 65536!" LeoEncoder.init(64, 32768 + 1, 32768).error == "number of parity and data buffers cannot exceed 65536!" test "Should not allow encoding with invalid data buffer counts": var dataLen =3 parityLen = 2 leo = LeoEncoder.init(64, 4, 2).tryGet() data = createDoubleArray(dataLen, 64) parity = createDoubleArray(parityLen, 64) defer: freeDoubleArray(data, dataLen) freeDoubleArray(parity, parityLen) check: leo.encode(data, parity,dataLen,parityLen).error == "Number of data buffers should match!" test "Should not allow encoding with invalid parity buffer counts": var dataLen =4 parityLen = 3 leo = LeoEncoder.init(64, 4, 2).tryGet() data = createDoubleArray(dataLen, 64) parity = createDoubleArray(parityLen, 64) defer: freeDoubleArray(data, dataLen) freeDoubleArray(parity, parityLen) check: leo.encode(data, parity,dataLen,parityLen).error == "Number of parity buffers should match!" test "Should not allow decoding with invalid data buffer counts": var dataLen =3 parityLen = 2 leo = LeoDecoder.init(64, 4, 2).tryGet() data = createDoubleArray(dataLen, 64) parity = createDoubleArray(parityLen, 64) recovered = createDoubleArray(dataLen, 64) defer: freeDoubleArray(data, dataLen) freeDoubleArray(parity, parityLen) freeDoubleArray(recovered, dataLen) check: leo.decode(data, parity, recovered,dataLen,parityLen,dataLen).error == "Number of data buffers should match!" test "Should not allow decoding with invalid data buffer counts": var dataLen =4 parityLen = 1 recoveredLen = 3 leo = LeoDecoder.init(64, 4, 2).tryGet() data = createDoubleArray(dataLen, 64) parity = createDoubleArray(parityLen, 64) recovered = createDoubleArray(recoveredLen, 64) check: leo.decode(data, parity, recovered,dataLen,parityLen,recoveredLen).error == "Number of parity buffers should match!" test "Should not allow decoding with invalid data buffer counts": var dataLen =4 parityLen = 2 recoveredLen = 3 leo = LeoDecoder.init(64, 4, 2).tryGet() data = createDoubleArray(dataLen, 64) parity = createDoubleArray(parityLen, 64) recovered = createDoubleArray(recoveredLen, 64) check: leo.decode(data, parity, recovered,dataLen,parityLen,recoveredLen).error == "Number of recovered buffers should match buffers!" suite "Leopard simple Encode/Decode": const TestString = "Hello World!" DataCount = 4 ParityCount = 2 BufferSize = 64 var encoder: LeoEncoder decoder: LeoDecoder data: ptr UncheckedArray[ptr UncheckedArray[byte]] parity: ptr UncheckedArray[ptr UncheckedArray[byte]] recovered: ptr UncheckedArray[ptr UncheckedArray[byte]] setup: encoder = LeoEncoder.init(BufferSize, DataCount, ParityCount).tryGet() decoder = LeoDecoder.init(BufferSize, DataCount, ParityCount).tryGet() data = createDoubleArray(DataCount, BufferSize) parity = createDoubleArray(ParityCount, BufferSize) recovered = createDoubleArray(DataCount, BufferSize) teardown: freeDoubleArray(data, DataCount) freeDoubleArray(parity, ParityCount) freeDoubleArray(recovered, DataCount) encoder.free() decoder.free() test "Test 2 data loses out of 4 possible": for i in 0..