public void LongDivideProperlyCorrectsErrorInAMessage4() { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = ((i + 50) % 255) + 1; } var modifiedData = reedSolomon.EncodeRawBytesArray(data); modifiedData[0] = 1; modifiedData[15] = 16; var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.LongDecode(modifiedData, 32); Assert.IsTrue(response); for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } }
public void ProperlyCorrectsErrorInAMessage2() { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = i + 10; } var modifiedData = reedSolomon.EncodeRawBytesArray(data); modifiedData[12] += 87; var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.Decode(modifiedData, 32); Assert.IsTrue(response); for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } }
public void ProperlyCorrectsErrorInAMessageLoop() { var random = new Random(1); for (var j = 0; j < 10;) { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = random.Next(1, 255); } var modifiedData = reedSolomon.EncodeRawBytesArray(data); var modifIndex = random.Next(255); modifiedData[modifIndex] = random.Next(255); var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.Decode(modifiedData, 32); if (response) { j++; for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } } } }
public void ImageDecodingBlockErrorsTest() { Bitmap originalImage; var fileStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/sandwich.bmp", FileMode.Open, FileAccess.Read); using (fileStream) { originalImage = new Bitmap(fileStream); } fileStream.Close(); var reedSolomon = new ReedSolomon(32); var data = ImageProcessing.GetRawBytesFromRGBImage(originalImage); var originalData = new int[data.Length]; Array.Copy(data, originalData, data.Length); var modifiedData = reedSolomon.EncodeRawBytesArray(data); var errorsCount = ErrorProvider.FillInGroupErrorsForEveryBlock(modifiedData, 16, 255); reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data); var processedImage = ImageProcessing.GetRGBImageFromRawBytes(originalImage, data); Bitmap diffImage; var diffCount = ImageProcessing.Compare(processedImage, originalImage, out diffImage); var bytesDiffCount = GetDiffTable(originalData, data); Assert.AreEqual(0, bytesDiffCount.Count); Assert.AreEqual(0, diffCount); }
public void ProperlyCorrects2ErrorsInAMessageLoop() { var random = new Random(1); for (var j = 0; j < 5;) { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = random.Next(1, 255); } var modifiedData = reedSolomon.EncodeRawBytesArray(data); var modifIndex = random.Next(255); var modifValue = random.Next(255); while (modifValue == modifiedData[modifIndex]) { modifValue = random.Next(255); } modifiedData[modifIndex] = modifValue; var modifIndex2 = random.Next(255); var modifValue2 = random.Next(255); while (modifIndex == modifIndex2) { modifIndex2 = random.Next(255); } while (modifValue2 == modifiedData[modifIndex2]) { modifValue2 = random.Next(255); } modifiedData[modifIndex2] = modifValue2; var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.Decode(modifiedData, 32); var bytesDiffCount = GetDiffTable(data, modifiedData, 223); Assert.IsTrue(bytesDiffCount.Count <= 2); if (response) { j++; for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } } } }
public void ProperlyCorrectsUpto16ErrorsInAMessageLoop() { var random = new Random(1); for (var j = 0; j < 17; j++) { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = random.Next(255); } var modifiedData = reedSolomon.EncodeRawBytesArray(data); var errorCount = 0; var startIndex = random.Next(0, 255 - 16); for (var k = startIndex; k < startIndex + j; k++) { var modifValue = random.Next(255); while (modifValue == modifiedData[k]) { modifValue = random.Next(255); } modifiedData[k] = modifValue; errorCount++; } var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.Decode(modifiedData, 32); var bytesDiffCount = GetDiffTable(data, modifiedData, 223); Assert.IsTrue(bytesDiffCount.Count <= errorCount); for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } } }
public void ProperlyNotCorrectsErrorInAMessage5() { var reedSolomon = new ReedSolomon(); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = ((i + 50) % 255) + 1; } var modifiedData = reedSolomon.EncodeRawBytesArray(data); modifiedData[0] = 0; modifiedData[170] = 170; var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256); var response = simpleDecoder.Decode(modifiedData, 32); Assert.IsFalse(response); }
public void ProperlyFindsErrorInAMessage() { var reedSolomon = new ReedSolomon(32); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = i + 10; } var modifiedData = reedSolomon.EncodeRawBytesArray(data); for (var i = 10; i < 30; i++) { modifiedData[i] = i + 5; } var simpleDecoder = new SimpleRSDecoder(); var response = simpleDecoder.Decode(modifiedData, 32); Assert.IsFalse(response); }
public void ProperlyDecodesNoErrorMessage() { var reedSolomon = new ReedSolomon(32); var data = new int[223]; for (var i = 0; i < 223; i++) { data[i] = i + 10; } var modifiedData = reedSolomon.EncodeRawBytesArray(data); var simpleDecoder = new SimpleRSDecoder(); var response = simpleDecoder.Decode(modifiedData, 32); Assert.IsTrue(response); for (var i = 0; i < 223; i++) { Assert.AreEqual(data[i], modifiedData[i]); } }
private void ProcessImageTransmissionSimulation(Params parms, int iterator, int fileOrder) { var errorMeasureValue = parms.ErrorMeasureValue; var correctionBytesCount = parms.CorrectionBytesCount; var decoderType = parms.RsDecoderType; var errorProviderType = parms.RsErrorProviderType; var orderNo = parms.OrderNo; const int blockSize = 255; var tries = 0; object clonedImage = null; while (clonedImage == null && tries < 5) { try { clonedImage = iterator % 2 == 0 ? _originalImage0.Clone() : _originalImage1.Clone(); } catch (InvalidOperationException ioe) { tries++; } } if (tries >= 5) { return; } var image = (Bitmap)clonedImage; var stopwatch = new Stopwatch(); var reedSolomon = new ReedSolomon(correctionBytesCount); var data = ImageProcessing.GetRawBytesFromRGBImage(image); stopwatch.Reset(); stopwatch.Start(); var modifiedData = reedSolomon.EncodeRawBytesArray(data); stopwatch.Stop(); var errorsCount = 0; switch (errorProviderType) { case ErrorProviderType.ErrorsTotalCount: errorsCount = ErrorProvider.FillInErrors(modifiedData, errorMeasureValue); break; case ErrorProviderType.PercentageOfErrors: errorsCount = ErrorProvider.FillInPercentageOfErrors(modifiedData, errorMeasureValue); break; case ErrorProviderType.SingleErrorsForEveryBlock: errorsCount = ErrorProvider.FillInErrorsForEveryBlock(modifiedData, errorMeasureValue, blockSize); break; case ErrorProviderType.ErrorsWithProbability: errorsCount = ErrorProvider.FillInErrorsWithProbability(modifiedData, (double)errorMeasureValue / 100); break; case ErrorProviderType.GroupErrorsForEveryBlock: errorsCount = ErrorProvider.FillInGroupErrorsForEveryBlock(modifiedData, errorMeasureValue, blockSize); break; } stopwatch.Start(); if (decoderType.Equals(DecoderType.Extended)) { reedSolomon.DecodeRawBytesArray(modifiedData, data); } else { reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data); } stopwatch.Stop(); var processedImage = ImageProcessing.GetRGBImageFromRawBytes(image, data); var diffCount = 0; try { Bitmap diffImage; diffCount = ImageProcessing.Compare(processedImage, image, out diffImage); } catch (InvalidOperationException ioe) { var singleResultException = new List <int> { errorMeasureValue, (int)errorProviderType, correctionBytesCount, (int)decoderType, 0, 0, 0, orderNo, fileOrder }; _results.TryAdd(singleResultException); return; } var singleResult = new List <int> { errorMeasureValue, (int)errorProviderType, correctionBytesCount, (int)decoderType, errorsCount, (int)stopwatch.ElapsedMilliseconds, diffCount, orderNo, fileOrder }; _results.TryAdd(singleResult); }