private static void testEncodeDecodeRandom(GenericGF field, int dataSize, int ecSize)
{
Assert.IsTrue(dataSize > 0 && dataSize <= field.Size - 3, "Invalid data size for " + field);
Assert.IsTrue(ecSize > 0 && ecSize + dataSize <= field.Size, "Invalid ECC size for " + field);
ReedSolomonEncoder encoder = new ReedSolomonEncoder(field);
int[] message = new int[dataSize + ecSize];
int[] dataWords = new int[dataSize];
int[] ecWords = new int[ecSize];
Random random = getPseudoRandom();
int iterations = field.Size > 256 ? 1 : DECODER_RANDOM_TEST_ITERATIONS;
for (int i = 0; i < iterations; i++)
{
// generate random data
for (int k = 0; k < dataSize; k++)
{
dataWords[k] = random.Next(field.Size);
}
// generate ECC words
Array.Copy(dataWords, 0, message, 0, dataWords.Length);
encoder.encode(message, ecWords.Length);
Array.Copy(message, dataSize, ecWords, 0, ecSize);
// check to see if Decoder can fix up to ecWords/2 random errors
testDecoder(field, dataWords, ecWords);
}
}