From a33ca5ee256eb923ea8d790861adf11c78cbe5a8 Mon Sep 17 00:00:00 2001 From: srowen Date: Fri, 14 Nov 2008 18:34:19 +0000 Subject: [PATCH] More enhancements to Reed-Solomon tests git-svn-id: http://zxing.googlecode.com/svn/trunk@703 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../AbstractReedSolomonTestCase.java | 6 ++++- .../ReedSolomonDecoderDataMatrixTestCase.java | 6 ++--- .../ReedSolomonDecoderQRCodeTestCase.java | 6 ++--- .../ReedSolomonEncoderQRCodeTestCase.java | 22 +++++++++++++++++++ 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/core/test/src/com/google/zxing/common/reedsolomon/AbstractReedSolomonTestCase.java b/core/test/src/com/google/zxing/common/reedsolomon/AbstractReedSolomonTestCase.java index 7957f51b..7697e004 100644 --- a/core/test/src/com/google/zxing/common/reedsolomon/AbstractReedSolomonTestCase.java +++ b/core/test/src/com/google/zxing/common/reedsolomon/AbstractReedSolomonTestCase.java @@ -47,7 +47,11 @@ abstract class AbstractReedSolomonTestCase extends TestCase { assertArraysEqual(expectedECBytes, 0, toEncode, dataBytes.length, expectedECBytes.length); } - private static void assertArraysEqual(int[] expected, int expectedOffset, int[] actual, int actualOffset, int length) { + static Random getRandom() { + return new Random(0xDEADBEEF); + } + + static void assertArraysEqual(int[] expected, int expectedOffset, int[] actual, int actualOffset, int length) { for (int i = 0; i < length; i++) { assertEquals(expected[expectedOffset + i], actual[actualOffset + i]); } diff --git a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderDataMatrixTestCase.java b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderDataMatrixTestCase.java index 98e582df..73f63f6e 100644 --- a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderDataMatrixTestCase.java +++ b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderDataMatrixTestCase.java @@ -40,7 +40,7 @@ public final class ReedSolomonDecoderDataMatrixTestCase extends AbstractReedSolo public void testOneError() throws ReedSolomonException { int[] received = new int[DM_CODE_TEST_WITH_EC.length]; - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); for (int i = 0; i < received.length; i++) { System.arraycopy(DM_CODE_TEST_WITH_EC, 0, received, 0, received.length); received[i] = random.nextInt(256); @@ -50,7 +50,7 @@ public final class ReedSolomonDecoderDataMatrixTestCase extends AbstractReedSolo public void testMaxErrors() throws ReedSolomonException { int[] received = new int[DM_CODE_TEST_WITH_EC.length]; - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); for (int i = 0; i < DM_CODE_TEST.length; i++) { // # iterations is kind of arbitrary System.arraycopy(DM_CODE_TEST_WITH_EC, 0, received, 0, received.length); corrupt(received, DM_CODE_CORRECTABLE, random); @@ -61,7 +61,7 @@ public final class ReedSolomonDecoderDataMatrixTestCase extends AbstractReedSolo public void testTooManyErrors() { int[] received = new int[DM_CODE_TEST_WITH_EC.length]; System.arraycopy(DM_CODE_TEST_WITH_EC, 0, received, 0, received.length); - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); corrupt(received, DM_CODE_CORRECTABLE + 1, random); try { checkQRRSDecode(received); diff --git a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderQRCodeTestCase.java b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderQRCodeTestCase.java index 108dbaea..48f50dfb 100644 --- a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderQRCodeTestCase.java +++ b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoderQRCodeTestCase.java @@ -45,7 +45,7 @@ public final class ReedSolomonDecoderQRCodeTestCase extends AbstractReedSolomonT public void testOneError() throws ReedSolomonException { int[] received = new int[QR_CODE_TEST_WITH_EC.length]; - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); for (int i = 0; i < received.length; i++) { System.arraycopy(QR_CODE_TEST_WITH_EC, 0, received, 0, received.length); received[i] = random.nextInt(256); @@ -55,7 +55,7 @@ public final class ReedSolomonDecoderQRCodeTestCase extends AbstractReedSolomonT public void testMaxErrors() throws ReedSolomonException { int[] received = new int[QR_CODE_TEST_WITH_EC.length]; - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); for (int i = 0; i < QR_CODE_TEST.length; i++) { // # iterations is kind of arbitrary System.arraycopy(QR_CODE_TEST_WITH_EC, 0, received, 0, received.length); corrupt(received, QR_CODE_CORRECTABLE, random); @@ -66,7 +66,7 @@ public final class ReedSolomonDecoderQRCodeTestCase extends AbstractReedSolomonT public void testTooManyErrors() { int[] received = new int[QR_CODE_TEST_WITH_EC.length]; System.arraycopy(QR_CODE_TEST_WITH_EC, 0, received, 0, received.length); - Random random = new Random(0xDEADBEEFL); + Random random = getRandom(); corrupt(received, QR_CODE_CORRECTABLE + 1, random); try { checkQRRSDecode(received); diff --git a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoderQRCodeTestCase.java b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoderQRCodeTestCase.java index 0cdba3f6..e2ad2b83 100644 --- a/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoderQRCodeTestCase.java +++ b/core/test/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoderQRCodeTestCase.java @@ -16,6 +16,8 @@ package com.google.zxing.common.reedsolomon; +import java.util.Random; + /** * @author srowen@google.com (Sean Owen) */ @@ -34,6 +36,26 @@ public final class ReedSolomonEncoderQRCodeTestCase extends AbstractReedSolomonT doTestQRCodeEncoding(dataBytes, expectedECBytes); } + public void testQRCodeVersusDecoder() throws Exception { + Random random = getRandom(); + ReedSolomonEncoder encoder = new ReedSolomonEncoder(GF256.QR_CODE_FIELD); + ReedSolomonDecoder decoder = new ReedSolomonDecoder(GF256.QR_CODE_FIELD); + for (int i = 0; i < 100; i++) { + int size = random.nextInt(1000); + int[] toEncode = new int[size]; + int ecBytes = random.nextInt(2 * (1 + size / 8)); + int dataBytes = size - ecBytes; + for (int j = 0; j < dataBytes; j++) { + toEncode[j] = random.nextInt(256); + } + int[] original = new int[dataBytes]; + System.arraycopy(toEncode, 0, original, 0, dataBytes); + encoder.encode(toEncode, ecBytes); + decoder.decode(toEncode, ecBytes); + assertArraysEqual(original, 0, toEncode, 0, dataBytes); + } + } + // Need more tests I am sure } -- 2.20.1