Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2)

Unified Diff: Core/Tests/Src/common/reedsolomon/ReedSolomonTest.cpp

Issue 2347: ZXing iPhone Client: first partially functional version Base URL: https://zxing.googlecode.com/svn/trunk/iphone/
Patch Set: ifdef:d out the repeated rotation of greyscale images Created 16 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Core/Tests/Src/common/reedsolomon/ReedSolomonTest.h ('k') | Core/Tests/Src/qrcode/decoder/DataMaskTest.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Core/Tests/Src/common/reedsolomon/ReedSolomonTest.cpp
===================================================================
--- Core/Tests/Src/common/reedsolomon/ReedSolomonTest.cpp (revision 0)
+++ Core/Tests/Src/common/reedsolomon/ReedSolomonTest.cpp (revision 0)
@@ -0,0 +1,131 @@
+/*
+ * ReedSolomonTest.cpp
+ * zxing
+ *
+ * Created by Christian Brunschen on 06/05/2008.
+ * Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ReedSolomonTest.h"
+#include "../../../../src/common/reedsolomon/GF256.h"
+#include "../../../../src/common/reedsolomon/GF256Poly.h"
+#include "../../../../src/common/reedsolomon/ReedSolomonDecoder.h"
+#include "../../../../src/common/reedsolomon/ReedSolomonException.h"
+#include "../../../../src/common/IllegalArgumentException.h"
+#include <vector>
+#include <cmath>
+
+using namespace common;
+
+namespace reedsolomon {
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(ReedSolomonTest);
+
+ static inline ArrayRef<int> makeVector(int n, int *items) {
+ ArrayRef<int> v(new Array<int>(items, n));
+ return v;
+ }
+
+ static int QR_CODE_TEST[] =
+ { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC,
+ 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xA5 };
+ static int QR_CODE_TEST_WITH_EC[] =
+ { 0x10, 0x20, 0x0C, 0x56, 0x61, 0x80, 0xEC, 0x11, 0xEC,
+ 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xEC, 0x11, 0xA5, 0x24,
+ 0xD4, 0xC1, 0xED, 0x36, 0xC7, 0x87, 0x2C, 0x55 };
+
+ void ReedSolomonTest::setUp() {
+ qrCodeTest_ =
+ makeVector(sizeof(QR_CODE_TEST) / sizeof(QR_CODE_TEST[0]),
+ QR_CODE_TEST);
+ qrCodeTestWithEc_ =
+ makeVector(sizeof(QR_CODE_TEST_WITH_EC) / sizeof(QR_CODE_TEST_WITH_EC[0]),
+ QR_CODE_TEST_WITH_EC);
+ qrCodeCorrectable_ =
+ (qrCodeTestWithEc_->size() - qrCodeTest_->size()) / 2;
+
+ qrRSDecoder_ = new ReedSolomonDecoder(GF256::QR_CODE_FIELD);
+ }
+
+ void ReedSolomonTest::tearDown() {
+ }
+
+ void ReedSolomonTest::testNoError() {
+ ArrayRef<int> received(new Array<int>(qrCodeTestWithEc_->size()));
+ *received = *qrCodeTestWithEc_;
+ checkQRRSDecode(received);
+ }
+
+ void ReedSolomonTest::testOneError() {
+ ArrayRef<int> received(new Array<int>(qrCodeTestWithEc_->size()));
+ srandom(0xDEADBEEFL);
+ for (unsigned i = 0; i < received->size(); i++) {
+ *received = *qrCodeTestWithEc_;
+ received[i] = random() % 256;
+ checkQRRSDecode(received);
+ }
+ }
+
+ void ReedSolomonTest::testMaxErrors() {
+ ArrayRef<int> received(new Array<int>(qrCodeTestWithEc_->size()));
+ srandom(0xDEADBEEFL);
+ for (unsigned i = 0; i < qrCodeTest_->size(); i++) {
+ *received = *qrCodeTestWithEc_;
+ corrupt(received, qrCodeCorrectable_);
+ checkQRRSDecode(received);
+ }
+ }
+
+ void ReedSolomonTest::testTooManyErrors() {
+ ArrayRef<int> received(new Array<int>(qrCodeTestWithEc_->size()));
+ srandom(0xDEADBEEFL);
+ *received = *qrCodeTestWithEc_;
+ try {
+ corrupt(received, qrCodeCorrectable_ + 1);
+ checkQRRSDecode(received);
+ cout << "expected exception!\n";
+ CPPUNIT_FAIL("should not happen!");
+ } catch (ReedSolomonException *e) {
+ // expected
+ delete e;
+ } catch (...) {
+ CPPUNIT_FAIL("unexpected exception!");
+ }
+ }
+
+
+ void ReedSolomonTest::checkQRRSDecode(ArrayRef<int> &received) {
+ int twoS = 2 * qrCodeCorrectable_;
+ qrRSDecoder_->decode(received, twoS);
+ for (unsigned i = 0; i < qrCodeTest_->size(); i++) {
+ CPPUNIT_ASSERT_EQUAL(qrCodeTest_[i], received[i]);
+ }
+ }
+
+ void ReedSolomonTest::corrupt(ArrayRef<int> &received, int howMany) {
+ vector<bool> corrupted(received->size());
+ for (int j = 0; j < howMany; j++) {
+ int location = floor(received->size() * ((double)(random()>>1) / (double)((RAND_MAX>>1)+1)));
+ if (corrupted[location]) {
+ j--;
+ } else {
+ corrupted[location] = true;
+ int newByte = random() % 256;
+ received[location] = newByte;
+ }
+ }
+ }
+
+}
« no previous file with comments | « Core/Tests/Src/common/reedsolomon/ReedSolomonTest.h ('k') | Core/Tests/Src/qrcode/decoder/DataMaskTest.h » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b