mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
MQRDecoderTest
This commit is contained in:
@@ -35,7 +35,7 @@ pub fn CorrectErrors(codewordBytes: &mut [u8], numDataCodewords: u32) -> Result<
|
|||||||
let rs = ReedSolomonDecoder::new(get_predefined_genericgf(
|
let rs = ReedSolomonDecoder::new(get_predefined_genericgf(
|
||||||
PredefinedGenericGF::QrCodeField256,
|
PredefinedGenericGF::QrCodeField256,
|
||||||
));
|
));
|
||||||
if rs.decode(&mut codewordsInts, numECCodewords)? == 0
|
if rs.decode(&mut codewordsInts, numECCodewords)? != 0
|
||||||
// if (!ReedSolomonDecode(GenericGF::QRCodeField256(), codewordsInts, numECCodewords))
|
// if (!ReedSolomonDecode(GenericGF::QRCodeField256(), codewordsInts, numECCodewords))
|
||||||
{
|
{
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
@@ -423,7 +423,7 @@ pub fn Decode(bits: &BitMatrix) -> Result<DecoderResult<bool>> {
|
|||||||
let mut codewordBytes = dataBlock.getCodewords().to_vec();
|
let mut codewordBytes = dataBlock.getCodewords().to_vec();
|
||||||
let numDataCodewords = dataBlock.getNumDataCodewords() as usize;
|
let numDataCodewords = dataBlock.getNumDataCodewords() as usize;
|
||||||
|
|
||||||
if (!CorrectErrors(&mut codewordBytes, numDataCodewords as u32)?) {
|
if !CorrectErrors(&mut codewordBytes, numDataCodewords as u32)? {
|
||||||
return Err(Exceptions::CHECKSUM);
|
return Err(Exceptions::CHECKSUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2017 Huy Cuong Nguyen
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*/
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
#include "qrcode/QRDecoder.h"
|
|
||||||
|
|
||||||
#include "BitMatrix.h"
|
|
||||||
#include "BitMatrixIO.h"
|
|
||||||
#include "DecoderResult.h"
|
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
|
||||||
|
|
||||||
using namespace ZXing;
|
|
||||||
using namespace ZXing::QRCode;
|
|
||||||
|
|
||||||
TEST(MQRDecoderTest, MQRCodeM3L)
|
|
||||||
{
|
|
||||||
const auto bitMatrix = ParseBitMatrix("XXXXXXX X X X X\n"
|
|
||||||
"X X X X \n"
|
|
||||||
"X XXX X XXXXXXX\n"
|
|
||||||
"X XXX X X X XX\n"
|
|
||||||
"X XXX X X XX\n"
|
|
||||||
"X X X X X X\n"
|
|
||||||
"XXXXXXX X XX \n"
|
|
||||||
" X X X\n"
|
|
||||||
"XXXXXX X X X\n"
|
|
||||||
" X XX XXX\n"
|
|
||||||
"XXX XX XXXX XXX\n"
|
|
||||||
" X X XXX X \n"
|
|
||||||
"X XXXXX XXX X X\n"
|
|
||||||
" X X X XXX \n"
|
|
||||||
"XXX XX X X XXXX\n",
|
|
||||||
88, false);
|
|
||||||
|
|
||||||
const auto result = Decode(bitMatrix);
|
|
||||||
EXPECT_TRUE(result.isValid());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(MQRDecoderTest, MQRCodeM3M)
|
|
||||||
{
|
|
||||||
const auto bitMatrix = ParseBitMatrix("XXXXXXX X X X X\n"
|
|
||||||
"X X XX\n"
|
|
||||||
"X XXX X X XX XX\n"
|
|
||||||
"X XXX X X X \n"
|
|
||||||
"X XXX X XX XXXX\n"
|
|
||||||
"X X XX \n"
|
|
||||||
"XXXXXXX X XXXX\n"
|
|
||||||
" X XXX \n"
|
|
||||||
"X XX XX X X\n"
|
|
||||||
" X X XX \n"
|
|
||||||
"XX XX XXXXXXX\n"
|
|
||||||
" X X X\n"
|
|
||||||
"XX X X X \n"
|
|
||||||
" X X X \n"
|
|
||||||
"X X XXXX XXX\n",
|
|
||||||
88, false);
|
|
||||||
|
|
||||||
const auto result = Decode(bitMatrix);
|
|
||||||
EXPECT_TRUE(result.isValid());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(MQRDecoderTest, MQRCodeM1)
|
|
||||||
{
|
|
||||||
const auto bitMatrix = ParseBitMatrix("XXXXXXX X X\n"
|
|
||||||
"X X \n"
|
|
||||||
"X XXX X XXX\n"
|
|
||||||
"X XXX X XX\n"
|
|
||||||
"X XXX X X\n"
|
|
||||||
"X X XX \n"
|
|
||||||
"XXXXXXX X \n"
|
|
||||||
" X \n"
|
|
||||||
"XX X \n"
|
|
||||||
" X XXXXX X\n"
|
|
||||||
"X XXXXXX X\n",
|
|
||||||
88, false);
|
|
||||||
const auto result = Decode(bitMatrix);
|
|
||||||
EXPECT_TRUE(result.isValid());
|
|
||||||
EXPECT_EQ(L"123", result.text());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(MQRDecoderTest, MQRCodeM1Error4Bits)
|
|
||||||
{
|
|
||||||
const auto bitMatrix = ParseBitMatrix("XXXXXXX X X\n"
|
|
||||||
"X X XX\n"
|
|
||||||
"X XXX X X \n"
|
|
||||||
"X XXX X XX\n"
|
|
||||||
"X XXX X X\n"
|
|
||||||
"X X XX \n"
|
|
||||||
"XXXXXXX X \n"
|
|
||||||
" X \n"
|
|
||||||
"XX X \n"
|
|
||||||
" X XXXXXX \n"
|
|
||||||
"X XXXXXXX \n",
|
|
||||||
88, false);
|
|
||||||
const auto result = Decode(bitMatrix);
|
|
||||||
EXPECT_EQ(Error::Checksum, result.error());
|
|
||||||
EXPECT_TRUE(result.text().empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(MQRDecoderTest, MQRCodeM4)
|
|
||||||
{
|
|
||||||
const auto bitMatrix = ParseBitMatrix("XXXXXXX X X X X X\n"
|
|
||||||
"X X XX X XX\n"
|
|
||||||
"X XXX X X X XX\n"
|
|
||||||
"X XXX X XX XX XX\n"
|
|
||||||
"X XXX X X XXXXX\n"
|
|
||||||
"X X XX X\n"
|
|
||||||
"XXXXXXX XX X XX\n"
|
|
||||||
" X XX XX\n"
|
|
||||||
"X X XXX X XXX\n"
|
|
||||||
" XX X XX XX X \n"
|
|
||||||
"XX XXXX X XX XX\n"
|
|
||||||
" XX XX X XX XX\n"
|
|
||||||
"XXX XXX XXX XX XX\n"
|
|
||||||
" X X X XX X\n"
|
|
||||||
"X X XX XXXXX \n"
|
|
||||||
" X X X X X \n"
|
|
||||||
"X XXXXXXX X X X\n",
|
|
||||||
88, false);
|
|
||||||
const auto result = Decode(bitMatrix);
|
|
||||||
EXPECT_TRUE(result.isValid());
|
|
||||||
}
|
|
||||||
137
src/qrcode/cpp_port/test/MQRDecoderTest.rs
Normal file
137
src/qrcode/cpp_port/test/MQRDecoderTest.rs
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2017 Huy Cuong Nguyen
|
||||||
|
* Copyright 2008 ZXing authors
|
||||||
|
*/
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
use crate::{qrcode::cpp_port::decoder::Decode, common::BitMatrix, Exceptions};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn MQRCodeM3L()
|
||||||
|
{
|
||||||
|
const CODE_STR : &str =
|
||||||
|
r"XXXXXXX X X X X
|
||||||
|
X X X X
|
||||||
|
X XXX X XXXXXXX
|
||||||
|
X XXX X X X XX
|
||||||
|
X XXX X X XX
|
||||||
|
X X X X X X
|
||||||
|
XXXXXXX X XX
|
||||||
|
X X X
|
||||||
|
XXXXXX X X X
|
||||||
|
X XX XXX
|
||||||
|
XXX XX XXXX XXX
|
||||||
|
X X XXX X
|
||||||
|
X XXXXX XXX X X
|
||||||
|
X X X XXX
|
||||||
|
XXX XX X X XXXX
|
||||||
|
";
|
||||||
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
||||||
|
"X", " ").unwrap();
|
||||||
|
|
||||||
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
|
assert!(result.isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn MQRCodeM3M()
|
||||||
|
{
|
||||||
|
const CODE_STR : &str =
|
||||||
|
r"XXXXXXX X X X X
|
||||||
|
X X XX
|
||||||
|
X XXX X X XX XX
|
||||||
|
X XXX X X X
|
||||||
|
X XXX X XX XXXX
|
||||||
|
X X XX
|
||||||
|
XXXXXXX X XXXX
|
||||||
|
X XXX
|
||||||
|
X XX XX X X
|
||||||
|
X X XX
|
||||||
|
XX XX XXXXXXX
|
||||||
|
X X X
|
||||||
|
XX X X X
|
||||||
|
X X X
|
||||||
|
X X XXXX XXX
|
||||||
|
";
|
||||||
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
||||||
|
"X", " ").unwrap();
|
||||||
|
|
||||||
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
|
assert!(result.isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn MQRCodeM1()
|
||||||
|
{
|
||||||
|
const CODE_STR : &str =
|
||||||
|
r"XXXXXXX X X
|
||||||
|
X X
|
||||||
|
X XXX X XXX
|
||||||
|
X XXX X XX
|
||||||
|
X XXX X X
|
||||||
|
X X XX
|
||||||
|
XXXXXXX X
|
||||||
|
X
|
||||||
|
XX X
|
||||||
|
X XXXXX X
|
||||||
|
X XXXXXX X
|
||||||
|
";
|
||||||
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
||||||
|
"X", " ").unwrap();
|
||||||
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
|
assert!(result.isValid());
|
||||||
|
assert_eq!("123", result.text());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn MQRCodeM1Error4Bits()
|
||||||
|
{
|
||||||
|
const CODE_STR : &str =
|
||||||
|
r"XXXXXXX X X
|
||||||
|
X X XX
|
||||||
|
X XXX X X
|
||||||
|
X XXX X XX
|
||||||
|
X XXX X X
|
||||||
|
X X XX
|
||||||
|
XXXXXXX X
|
||||||
|
X
|
||||||
|
XX X
|
||||||
|
X XXXXXX
|
||||||
|
X XXXXXXX
|
||||||
|
";
|
||||||
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
||||||
|
"X", " ").unwrap();
|
||||||
|
let result = Decode(&bitMatrix);
|
||||||
|
dbg!(&result);
|
||||||
|
assert!(matches!(result.err(), Some(Exceptions::ReedSolomonException(_))));
|
||||||
|
// assert_eq!(Error::Checksum, result.error());
|
||||||
|
// assert!(result.text().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn MQRCodeM4()
|
||||||
|
{
|
||||||
|
const CODE_STR : &str =
|
||||||
|
r"XXXXXXX X X X X X
|
||||||
|
X X XX X XX
|
||||||
|
X XXX X X X XX
|
||||||
|
X XXX X XX XX XX
|
||||||
|
X XXX X X XXXXX
|
||||||
|
X X XX X
|
||||||
|
XXXXXXX XX X XX
|
||||||
|
X XX XX
|
||||||
|
X X XXX X XXX
|
||||||
|
XX X XX XX X
|
||||||
|
XX XXXX X XX XX
|
||||||
|
XX XX X XX XX
|
||||||
|
XXX XXX XXX XX XX
|
||||||
|
X X X XX X
|
||||||
|
X X XX XXXXX
|
||||||
|
X X X X X
|
||||||
|
X XXXXXXX X X X
|
||||||
|
";
|
||||||
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
||||||
|
"X", " ").unwrap();
|
||||||
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
|
assert!(result.isValid());
|
||||||
|
}
|
||||||
@@ -10,3 +10,5 @@ mod QRDecodedBitStreamParserTest;
|
|||||||
mod QRDataMaskTest;
|
mod QRDataMaskTest;
|
||||||
|
|
||||||
mod QRBitMatrixParserTest;
|
mod QRBitMatrixParserTest;
|
||||||
|
|
||||||
|
mod MQRDecoderTest;
|
||||||
Reference in New Issue
Block a user