From d5c4d4de78069d4a4404e56882364665ca20164f Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Sun, 16 Apr 2023 10:59:33 -0500 Subject: [PATCH] MQRDecoderTest --- src/qrcode/cpp_port/decoder.rs | 4 +- src/qrcode/cpp_port/test/MQRDecoderTest.cpp | 124 ------------------ src/qrcode/cpp_port/test/MQRDecoderTest.rs | 137 ++++++++++++++++++++ src/qrcode/cpp_port/test/mod.rs | 4 +- 4 files changed, 142 insertions(+), 127 deletions(-) delete mode 100644 src/qrcode/cpp_port/test/MQRDecoderTest.cpp create mode 100644 src/qrcode/cpp_port/test/MQRDecoderTest.rs diff --git a/src/qrcode/cpp_port/decoder.rs b/src/qrcode/cpp_port/decoder.rs index 0dd0e4d..c6637bf 100644 --- a/src/qrcode/cpp_port/decoder.rs +++ b/src/qrcode/cpp_port/decoder.rs @@ -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> { 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); } diff --git a/src/qrcode/cpp_port/test/MQRDecoderTest.cpp b/src/qrcode/cpp_port/test/MQRDecoderTest.cpp deleted file mode 100644 index 25e7f70..0000000 --- a/src/qrcode/cpp_port/test/MQRDecoderTest.cpp +++ /dev/null @@ -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()); -} diff --git a/src/qrcode/cpp_port/test/MQRDecoderTest.rs b/src/qrcode/cpp_port/test/MQRDecoderTest.rs new file mode 100644 index 0000000..5a1c1a8 --- /dev/null +++ b/src/qrcode/cpp_port/test/MQRDecoderTest.rs @@ -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()); +} diff --git a/src/qrcode/cpp_port/test/mod.rs b/src/qrcode/cpp_port/test/mod.rs index b639d26..e48bc92 100644 --- a/src/qrcode/cpp_port/test/mod.rs +++ b/src/qrcode/cpp_port/test/mod.rs @@ -9,4 +9,6 @@ mod QRDecodedBitStreamParserTest; mod QRDataMaskTest; -mod QRBitMatrixParserTest; \ No newline at end of file +mod QRBitMatrixParserTest; + +mod MQRDecoderTest; \ No newline at end of file