MQRDecoderTest

This commit is contained in:
Henry Schimke
2023-04-16 10:59:33 -05:00
parent 361130c389
commit d5c4d4de78
4 changed files with 142 additions and 127 deletions

View File

@@ -35,7 +35,7 @@ pub fn CorrectErrors(codewordBytes: &mut [u8], numDataCodewords: u32) -> Result<
let rs = ReedSolomonDecoder::new(get_predefined_genericgf(
PredefinedGenericGF::QrCodeField256,
));
if rs.decode(&mut codewordsInts, numECCodewords)? == 0
if rs.decode(&mut codewordsInts, numECCodewords)? != 0
// if (!ReedSolomonDecode(GenericGF::QRCodeField256(), codewordsInts, numECCodewords))
{
return Ok(false);
@@ -423,7 +423,7 @@ pub fn Decode(bits: &BitMatrix) -> Result<DecoderResult<bool>> {
let mut codewordBytes = dataBlock.getCodewords().to_vec();
let numDataCodewords = dataBlock.getNumDataCodewords() as usize;
if (!CorrectErrors(&mut codewordBytes, numDataCodewords as u32)?) {
if !CorrectErrors(&mut codewordBytes, numDataCodewords as u32)? {
return Err(Exceptions::CHECKSUM);
}

View File

@@ -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());
}

View 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());
}

View File

@@ -9,4 +9,6 @@ mod QRDecodedBitStreamParserTest;
mod QRDataMaskTest;
mod QRBitMatrixParserTest;
mod QRBitMatrixParserTest;
mod MQRDecoderTest;