refactoring on the namespaces

Added call to ReedSolomonEncoderTests
This commit is contained in:
favoritas37 2016-08-01 19:39:09 +03:00
parent 55c2e7547d
commit 5b5b851c96
11 changed files with 92 additions and 120 deletions

View File

@ -20,8 +20,8 @@ public:
QImage getOriginalImage(); QImage getOriginalImage();
Ref<GreyscaleLuminanceSource> getDelegate() { return delegate; } Ref<GreyscaleLuminanceSource> getDelegate() { return delegate; }
ArrayRef<byte> getRow(int y, ArrayRef<byte> row) const; ArrayRef<zxing::byte> getRow(int y, ArrayRef<zxing::byte> row) const;
ArrayRef<byte> getMatrix() const; ArrayRef<zxing::byte> getMatrix() const;
bool isCropSupported() const; bool isCropSupported() const;
Ref<LuminanceSource> crop(int left, int top, int width, int height) const; Ref<LuminanceSource> crop(int left, int top, int width, int height) const;
@ -30,8 +30,8 @@ public:
Ref<LuminanceSource> rotateCounterClockwise() const; Ref<LuminanceSource> rotateCounterClockwise() const;
private: private:
ArrayRef<byte> getRowP(int y, ArrayRef<byte> row) const; ArrayRef<zxing::byte> getRowP(int y, ArrayRef<zxing::byte> row) const;
ArrayRef<byte> getMatrixP() const; ArrayRef<zxing::byte> getMatrixP() const;
#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
QImage* grayScaleImage(const QImage *origin); QImage* grayScaleImage(const QImage *origin);
#endif #endif

View File

@ -341,7 +341,7 @@ QImage QZXing::encodeData(const QString& data)
try { try {
Ref<qrcode::QRCode> barcode = qrcode::Encoder::encode(data, qrcode::ErrorCorrectionLevel::L ); Ref<qrcode::QRCode> barcode = qrcode::Encoder::encode(data, qrcode::ErrorCorrectionLevel::L );
Ref<qrcode::ByteMatrix> bytesRef = barcode->getMatrix(); Ref<qrcode::ByteMatrix> bytesRef = barcode->getMatrix();
const std::vector< std::vector <byte> >& bytes = bytesRef->getArray(); const std::vector< std::vector <zxing::byte> >& bytes = bytesRef->getArray();
image = QImage(bytesRef->getWidth(), bytesRef->getHeight(), QImage::Format_ARGB32); image = QImage(bytesRef->getWidth(), bytesRef->getHeight(), QImage::Format_ARGB32);
for(int i=0; i<bytesRef->getWidth(); i++) for(int i=0; i<bytesRef->getWidth(); i++)
for(int j=0; j<bytesRef->getHeight(); j++) for(int j=0; j<bytesRef->getHeight(); j++)

View File

@ -27,6 +27,9 @@ using zxing::BitArray;
// VC++ // VC++
using zxing::Ref; using zxing::Ref;
namespace zxing {
int BitArray::makeArraySize(int size) { int BitArray::makeArraySize(int size) {
return (size + 31) / 32; return (size + 31) / 32;
} }
@ -275,3 +278,5 @@ const std::string BitArray::toString() const
} }
}

View File

@ -29,14 +29,17 @@
using zxing::Ref; using zxing::Ref;
using zxing::DecoderResult; using zxing::DecoderResult;
using zxing::datamatrix::Decoder; //using zxing::datamatrix::Decoder;
using zxing::datamatrix::DataBlock; //using zxing::datamatrix::DataBlock;
using zxing::datamatrix::DecodedBitStreamParser; //using zxing::datamatrix::DecodedBitStreamParser;
// VC++ // VC++
using zxing::ArrayRef; using zxing::ArrayRef;
using zxing::BitMatrix; using zxing::BitMatrix;
namespace zxing {
namespace datamatrix {
Decoder::Decoder() : rsDecoder_(GenericGF::DATA_MATRIX_FIELD_256) {} Decoder::Decoder() : rsDecoder_(GenericGF::DATA_MATRIX_FIELD_256) {}
void Decoder::correctErrors(ArrayRef<byte> codewordBytes, int numDataCodewords) { void Decoder::correctErrors(ArrayRef<byte> codewordBytes, int numDataCodewords) {
@ -93,3 +96,6 @@ Ref<DecoderResult> Decoder::decode(Ref<BitMatrix> bits) {
DecodedBitStreamParser decodedBSParser; DecodedBitStreamParser decodedBSParser;
return Ref<DecoderResult> (decodedBSParser.decode(resultBytes)); return Ref<DecoderResult> (decodedBSParser.decode(resultBytes));
} }
}
}

View File

@ -429,8 +429,7 @@ ArrayRef<byte> Encoder::generateECBytes(const std::vector<byte>& dataBytes, int
std::vector<int> toEncode; std::vector<int> toEncode;
toEncode.resize(numDataBytes + numEcBytesInBlock); toEncode.resize(numDataBytes + numEcBytesInBlock);
for (int i = 0; i < numDataBytes; i++) for (int i = 0; i < numDataBytes; i++)
//toEncode[i] = dataBytes[i]; toEncode[i] = dataBytes[i];
toEncode[i] = dataBytes[i] & 0xFF;
zxing::ReedSolomonEncoder encoder(GenericGF::QR_CODE_FIELD_256); zxing::ReedSolomonEncoder encoder(GenericGF::QR_CODE_FIELD_256);
encoder.encode(toEncode, numEcBytesInBlock); encoder.encode(toEncode, numEcBytesInBlock);

View File

@ -8,9 +8,9 @@
#include "zxing/qrcode/encoder/BitArrayTests.h" #include "zxing/qrcode/encoder/BitArrayTests.h"
#include "zxing/qrcode/encoder/QRCodeTests.h" #include "zxing/qrcode/encoder/QRCodeTests.h"
#include "zxing/qrcode/encoder/EncoderTests.h" #include "zxing/qrcode/encoder/EncoderTests.h"
#include "zxing/common/reedsolomon/ReedSolomonEncoderTests.h"
namespace zxing { namespace zxing {
namespace qrcode {
namespace tests{ namespace tests{
EncodeValidator::EncodeValidator() EncodeValidator::EncodeValidator()
@ -21,110 +21,28 @@ EncodeValidator::EncodeValidator()
void EncodeValidator::execute() void EncodeValidator::execute()
{ {
try{ try{
MatrixUtilTests t; qrcode::tests::MatrixUtilTests t;
t.execute(); t.execute();
MaskUtilTests t1; qrcode::tests::MaskUtilTests t1;
t1.execute(); t1.execute();
BitArrayTests t2; qrcode::tests::BitArrayTests t2;
t2.execute(); t2.execute();
QRCodeTests t3; qrcode::tests::QRCodeTests t3;
t3.execute(); t3.execute();
EncoderTests t4; ReedSolomonEncoderTests t4;
t4.execute(); t4.execute();
qrcode::tests::EncoderTests t5;
t5.execute();
} catch(zxing::Exception &e) { } catch(zxing::Exception &e) {
qDebug() << "Exception: " << e.what(); qDebug() << "Exception: " << e.what();
} }
} }
void EncodeValidator::executeQrCodeEncodeTest()
{
// zxing::qrcode::QRCode qrCode = new zxing::qrcode::QRCode();
// // First, test simple setters and getters.
// // We use numbers of version 7-H.
// qrCode.setMode(zxing::qrcode::Mode.BYTE);
// qrCode.setECLevel(zxing::qrcode::ErrorCorrectionLevel.H);
// qrCode.setVersion(zxing::qrcode::Version.getVersionForNumber(7));
// qrCode.setMaskPattern(3);
// bool modeEquals = Mode.BYTE == qrCode.getMode();
// bool errorCodeEquals = zxing::qrcode::ErrorCorrectionLevel.H == qrCode.getECLevel();
// bool versionEquals = 7 == qrCode.getVersion().getVersionNumber();
// bool maskPatternEquals = 3 = qrCode.getMaskPattern();
// // Prepare the matrix.
// zxing::qrcode::ByteMatrix matrix = new zxing::qrcode::ByteMatrix(45, 45);
// // Just set bogus zero/one values.
// for (int y = 0; y < 45; ++y) {
// for (int x = 0; x < 45; ++x) {
// matrix.set(x, y, (y + x) % 2);
// }
// }
// // Set the matrix.
// qrCode.setMatrix(matrix);
// assertSame(matrix, qrCode.getMatrix());
}
void EncodeValidator::testGetAlphanumericCode() {
// The first ten code points are numbers.
for (int i = 0; i < 10; ++i) {
assertEquals(i, Encoder::getAlphanumericCode('0' + i));
}
// The next 26 code points are capital alphabet letters.
for (int i = 10; i < 36; ++i) {
assertEquals(i, Encoder::getAlphanumericCode('A' + i - 10));
}
// Others are symbol letters
assertEquals(36, Encoder::getAlphanumericCode(' '));
assertEquals(37, Encoder::getAlphanumericCode('$'));
assertEquals(38, Encoder::getAlphanumericCode('%'));
assertEquals(39, Encoder::getAlphanumericCode('*'));
assertEquals(40, Encoder::getAlphanumericCode('+'));
assertEquals(41, Encoder::getAlphanumericCode('-'));
assertEquals(42, Encoder::getAlphanumericCode('.'));
assertEquals(43, Encoder::getAlphanumericCode('/'));
assertEquals(44, Encoder::getAlphanumericCode(':'));
// Should return -1 for other letters;
assertEquals(-1, Encoder::getAlphanumericCode('a'));
assertEquals(-1, Encoder::getAlphanumericCode('#'));
assertEquals(-1, Encoder::getAlphanumericCode('\0'));
}
void EncodeValidator::testChooseMode(){
// // Numeric mode.
// assertSame(Mode::NUMERIC, Mode::chooseMode("0"));
// assertSame(Mode::NUMERIC, Mode::chooseMode("0123456789"));
// // Alphanumeric mode.
// assertSame(Mode::ALPHANUMERIC, Mode::chooseMode("A"));
// assertSame(Mode::ALPHANUMERIC,
// Encoder.chooseMode("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"));
// // 8-bit byte mode.
// assertSame(Mode::BYTE, Mode::chooseMode("a"));
// assertSame(Mode::BYTE, Mode::chooseMode("#"));
// assertSame(Mode::BYTE, Mode::chooseMode(""));
// // Kanji mode. We used to use MODE_KANJI for these, but we stopped
// // doing that as we cannot distinguish Shift_JIS from other encodings
// // from data bytes alone. See also comments in qrcode_encoder.h.
// // AIUE in Hiragana in Shift_JIS
// assertSame(Mode::BYTE,
// Encoder::chooseMode(shiftJISString(new byte[]{0x8, 0xa, 0x8, 0xa, 0x8, 0xa, 0x8, (byte) 0xa6})));
// // Nihon in Kanji in Shift_JIS.
// assertSame(Mode::BYTE, Encoder::chooseMode(shiftJISString(new byte[]{0x9, 0xf, 0x9, 0x7b})));
// // Sou-Utsu-Byou in Kanji in Shift_JIS.
// assertSame(Mode::BYTE, Encoder::chooseMode(shiftJISString(new byte[]{0xe, 0x4, 0x9, 0x5, 0x9, 0x61})));
}
}
} }
} }

View File

@ -11,7 +11,6 @@
#include <TestCase.h> #include <TestCase.h>
namespace zxing { namespace zxing {
namespace qrcode {
namespace tests{ namespace tests{
class EncodeValidator : public TestCase class EncodeValidator : public TestCase
@ -19,15 +18,8 @@ class EncodeValidator : public TestCase
public: public:
EncodeValidator(); EncodeValidator();
void execute(); void execute();
private:
void executeQrCodeEncodeTest();
void testGetAlphanumericCode();
void testChooseMode();
}; };
}
} }
} }

View File

@ -18,7 +18,8 @@ SOURCES += main.cpp \
zxing/qrcode/encoder/MaskUtilTests.cpp \ zxing/qrcode/encoder/MaskUtilTests.cpp \
zxing/qrcode/encoder/BitArrayTests.cpp \ zxing/qrcode/encoder/BitArrayTests.cpp \
zxing/qrcode/encoder/QRCodeTests.cpp \ zxing/qrcode/encoder/QRCodeTests.cpp \
zxing/qrcode/encoder/EncoderTests.cpp zxing/qrcode/encoder/EncoderTests.cpp \
zxing/common/reedsolomon/ReedSolomonEncoderTests.cpp
HEADERS += \ HEADERS += \
DecodeValidator.h \ DecodeValidator.h \
@ -29,6 +30,7 @@ HEADERS += \
zxing/qrcode/encoder/MaskUtilTests.h \ zxing/qrcode/encoder/MaskUtilTests.h \
zxing/qrcode/encoder/BitArrayTests.h \ zxing/qrcode/encoder/BitArrayTests.h \
zxing/qrcode/encoder/QRCodeTests.h \ zxing/qrcode/encoder/QRCodeTests.h \
zxing/qrcode/encoder/EncoderTests.h zxing/qrcode/encoder/EncoderTests.h \
zxing/common/reedsolomon/ReedSolomonEncoderTests.h
include(../../../src/QZXing.pri) include(../../../src/QZXing.pri)

View File

@ -3,12 +3,12 @@
#include "DecodeValidator.h" #include "DecodeValidator.h"
int main(int argc, char *argv[]) int main(int /*argc*/, char */*argv[]*/)
{ {
DecodeValidator decodeValidator; DecodeValidator decodeValidator;
decodeValidator.executeTests("../../resources/"); decodeValidator.executeTests("../../resources/");
zxing::qrcode::tests::EncodeValidator encodeValidator; zxing::tests::EncodeValidator encodeValidator;
encodeValidator.execute(); encodeValidator.execute();
} }

View File

@ -22,6 +22,8 @@ void EncoderTests::execute()
testInterleaveWithECBytes(); testInterleaveWithECBytes();
testAppendNumericBytes(); testAppendNumericBytes();
testAppendAlphanumericBytes(); testAppendAlphanumericBytes();
testAppend8BitBytes();
testGenerateECBytes();
} }
void EncoderTests::testGetAlphanumericCode() void EncoderTests::testGetAlphanumericCode()
@ -339,6 +341,51 @@ void EncoderTests::testAppendAlphanumericBytes()
ASSERT_THROWS( Encoder::appendAlphanumericBytes("abc", bits); ) ASSERT_THROWS( Encoder::appendAlphanumericBytes("abc", bits); )
} }
void EncoderTests::testAppend8BitBytes()
{
BitArray bits;
Encoder::append8BitBytes("abc", bits, Encoder::DEFAULT_BYTE_MODE_ENCODING);
assertEquals(" .XX....X .XX...X. .XX...XX", bits.toString());
// Empty.
bits = BitArray();
Encoder::append8BitBytes("", bits, Encoder::DEFAULT_BYTE_MODE_ENCODING);
assertEquals("", bits.toString());
}
void EncoderTests::testGenerateECBytes()
{
const byte dataBytes_arr[] = {32, 65, (byte)205, 69, 41, (byte)220, 46, (byte)128, (byte)236};
std::vector<byte> dataBytes (dataBytes_arr, dataBytes_arr + getArrayLength(dataBytes_arr));
ArrayRef<byte> ecBytes = Encoder::generateECBytes(dataBytes, 17);
const int expected[] = {
42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61
};
assertEquals( getArrayLength(expected), ecBytes.count());
for (int x = 0; x < getArrayLength(expected); x++) {
assertEquals(expected[x], ecBytes[x] & 0xFF);
}
// dataBytes = new byte[] {67, 70, 22, 38, 54, 70, 86, 102, 118,
// (byte)134, (byte)150, (byte)166, (byte)182, (byte)198, (byte)214};
// ecBytes = Encoder.generateECBytes(dataBytes, 18);
// expected = new int[] {
// 175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187
// };
// assertEquals(expected.length, ecBytes.length);
// for (int x = 0; x < expected.length; x++) {
// assertEquals(expected[x], ecBytes[x] & 0xFF);
// }
// // High-order zero coefficient case.
// dataBytes = new byte[] {32, 49, (byte)205, 69, 42, 20, 0, (byte)236, 17};
// ecBytes = Encoder.generateECBytes(dataBytes, 17);
// expected = new int[] {
// 0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213
// };
// assertEquals(expected.length, ecBytes.length);
// for (int x = 0; x < expected.length; x++) {
// assertEquals(expected[x], ecBytes[x] & 0xFF);
// }
}

View File

@ -34,6 +34,9 @@ private:
void testInterleaveWithECBytes(); void testInterleaveWithECBytes();
void testAppendNumericBytes(); void testAppendNumericBytes();
void testAppendAlphanumericBytes(); void testAppendAlphanumericBytes();
void testAppend8BitBytes();
//void testAppendKanjiBytes(); not yet supported
void testGenerateECBytes();
static std::string shiftJISString(byte bytes[]); static std::string shiftJISString(byte bytes[]);
}; };