mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
still working on tests
This commit is contained in:
@@ -417,3 +417,15 @@ impl Into<Vec<u8>> for BitArray {
|
|||||||
// arr
|
// arr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Into<Vec<bool>> for BitArray {
|
||||||
|
fn into(self) -> Vec<bool> {
|
||||||
|
let mut array = vec![false; self.size];
|
||||||
|
|
||||||
|
for pixel in 0..self.size {
|
||||||
|
array[pixel] = bool::from(self.get(pixel));
|
||||||
|
}
|
||||||
|
|
||||||
|
array
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ impl<'a> PatternView<'_> {
|
|||||||
pub fn new(bars: &'a PatternRow) -> PatternView<'a> {
|
pub fn new(bars: &'a PatternRow) -> PatternView<'a> {
|
||||||
PatternView {
|
PatternView {
|
||||||
data: bars,
|
data: bars,
|
||||||
start: 0,
|
start: 1,
|
||||||
count: bars.0.len(),
|
count: bars.0.len(),
|
||||||
current: 0,
|
current: 0,
|
||||||
}
|
}
|
||||||
@@ -116,11 +116,12 @@ impl<'a> PatternView<'_> {
|
|||||||
Some(*self.data.0.get(self.start)?)
|
Some(*self.data.0.get(self.start)?)
|
||||||
}
|
}
|
||||||
pub fn end(&self) -> Option<PatternType> {
|
pub fn end(&self) -> Option<PatternType> {
|
||||||
if self.start + self.count < self.data.0.len() {
|
// if self.start + self.count < self.data.0.len() {
|
||||||
Some(self.data.0[self.start + self.count])
|
// Some(self.data.0[self.start + self.count])
|
||||||
} else {
|
// } else {
|
||||||
None
|
// None
|
||||||
}
|
// }
|
||||||
|
Some(self.data.0.len() as PatternType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// int sum(int n = 0) const { return std::accumulate(_data, _data + (n == 0 ? _size : n), 0); }
|
// int sum(int n = 0) const { return std::accumulate(_data, _data + (n == 0 ? _size : n), 0); }
|
||||||
@@ -130,7 +131,7 @@ impl<'a> PatternView<'_> {
|
|||||||
self.data
|
self.data
|
||||||
.0
|
.0
|
||||||
.iter()
|
.iter()
|
||||||
.skip(self.start)
|
.skip(self.start + self.current)
|
||||||
.take(n)
|
.take(n)
|
||||||
.copied()
|
.copied()
|
||||||
.sum::<PatternType>()
|
.sum::<PatternType>()
|
||||||
@@ -253,6 +254,21 @@ impl<'a> PatternView<'_> {
|
|||||||
pub fn extend(&mut self) {
|
pub fn extend(&mut self) {
|
||||||
self.count = std::cmp::max(0, self.count - self.start)
|
self.count = std::cmp::max(0, self.count - self.start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn try_get_index(&self, index: isize) -> Option<PatternType> {
|
||||||
|
if index.abs() > self.data.0.len() as isize {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
if index >= 0 {
|
||||||
|
let fetch_spot = ((self.start + self.current) as isize + index) as usize;
|
||||||
|
return Some(self.data.0[fetch_spot])
|
||||||
|
}
|
||||||
|
if index.abs() > (self.start + self.current) as isize {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let fetch_spot = ((self.start + self.current) as isize + index) as usize;
|
||||||
|
Some(self.data.0[fetch_spot])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> std::ops::Index<isize> for PatternView<'_> {
|
impl<'a> std::ops::Index<isize> for PatternView<'_> {
|
||||||
@@ -263,12 +279,13 @@ impl<'a> std::ops::Index<isize> for PatternView<'_> {
|
|||||||
panic!("array index out of bounds")
|
panic!("array index out of bounds")
|
||||||
}
|
}
|
||||||
if index >= 0 {
|
if index >= 0 {
|
||||||
return &self[index as usize];
|
let fetch_spot = ((self.start + self.current) as isize + index) as usize;
|
||||||
|
return &self.data.0[fetch_spot]
|
||||||
}
|
}
|
||||||
if index.abs() > self.start as isize {
|
if index.abs() > self.start as isize {
|
||||||
panic!("array index out of bounds")
|
panic!("array index out of bounds")
|
||||||
}
|
}
|
||||||
let fetch_spot = (self.start as isize + index) as usize;
|
let fetch_spot = ((self.start + self.current) as isize + index) as usize;
|
||||||
&self.data.0[fetch_spot]
|
&self.data.0[fetch_spot]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,6 +427,7 @@ pub fn IsPattern<const LEN: usize, const SUM: usize, const SPARSE: bool>(
|
|||||||
relaxed_threshold: Option<bool>,
|
relaxed_threshold: Option<bool>,
|
||||||
) -> f32 {
|
) -> f32 {
|
||||||
let relaxed_threshold = relaxed_threshold.unwrap_or(false);
|
let relaxed_threshold = relaxed_threshold.unwrap_or(false);
|
||||||
|
let mut module_size_ref = module_size_ref;
|
||||||
|
|
||||||
let width = view.sum(Some(LEN));
|
let width = view.sum(Some(LEN));
|
||||||
if SUM > LEN && Into::<usize>::into(width) < SUM {
|
if SUM > LEN && Into::<usize>::into(width) < SUM {
|
||||||
@@ -424,6 +442,10 @@ pub fn IsPattern<const LEN: usize, const SUM: usize, const SPARSE: bool>(
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (module_size_ref == 0.0) {
|
||||||
|
module_size_ref = module_size;
|
||||||
|
}
|
||||||
|
|
||||||
let threshold = module_size_ref * (0.5 + (relaxed_threshold as u8) as f32 * 0.25) + 0.5;
|
let threshold = module_size_ref * (0.5 + (relaxed_threshold as u8) as f32 * 0.25) + 0.5;
|
||||||
|
|
||||||
// the offset of 0.5 is to make the code less sensitive to quantization errors for small (near 1) module sizes.
|
// the offset of 0.5 is to make the code less sensitive to quantization errors for small (near 1) module sizes.
|
||||||
@@ -478,8 +500,13 @@ pub fn FindLeftGuardBy<'a, const LEN: usize, Pred: Fn(&PatternView, Option<f32>)
|
|||||||
return Ok(window);
|
return Ok(window);
|
||||||
}
|
}
|
||||||
let end = Into::<usize>::into(view.end().ok_or(Exceptions::INDEX_OUT_OF_BOUNDS)?) - minSize;
|
let end = Into::<usize>::into(view.end().ok_or(Exceptions::INDEX_OUT_OF_BOUNDS)?) - minSize;
|
||||||
while window.start < end {
|
while (window.start + window.current) < end {
|
||||||
if isGuard(&window, Some(Into::<f32>::into(window[PREV_IDX]))) {
|
let prev = if let Some(v) = window.try_get_index(PREV_IDX) {
|
||||||
|
Some(v as f32)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
if isGuard(&window, prev) {
|
||||||
return Ok(window);
|
return Ok(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +523,15 @@ pub fn FindLeftGuard<'a, const LEN: usize, const SUM: usize, const IS_SPARCE: bo
|
|||||||
minQuietZone: f32,
|
minQuietZone: f32,
|
||||||
) -> Result<PatternView<'a>> {
|
) -> Result<PatternView<'a>> {
|
||||||
FindLeftGuardBy::<LEN, _>(view, std::cmp::max(minSize, LEN), |window, spaceInPixel| {
|
FindLeftGuardBy::<LEN, _>(view, std::cmp::max(minSize, LEN), |window, spaceInPixel| {
|
||||||
IsPattern(window, pattern, spaceInPixel, minQuietZone, 0.0, None) != 0.0
|
// perform a fast plausability test for 1:1:3:1:1 pattern
|
||||||
|
// dbg!(window[2], 2 as PatternType * std::cmp::max(window[0], window[4]));
|
||||||
|
// dbg!(window[2] < std::cmp::max(window[1], window[3]));
|
||||||
|
if (window[2] < 2 as PatternType * std::cmp::max(window[0], window[4])
|
||||||
|
|| window[2] < std::cmp::max(window[1], window[3]))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return IsPattern(window, pattern, spaceInPixel, minQuietZone, 0.0, None) != 0.0;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,11 +603,15 @@ impl<T: Into<PatternType>> From<T> for Color {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn GetPatternRowTP(matrix: &BitMatrix, r: u32, pr: &mut PatternRow, transpose: bool) {
|
pub fn GetPatternRowTP(matrix: &BitMatrix, r: u32, pr: &mut PatternRow, transpose: bool) {
|
||||||
if (transpose) {
|
let row = if transpose {
|
||||||
GetPatternRow(&Into::<Vec<u8>>::into(matrix.getCol(r)), pr)
|
matrix.getCol(r)
|
||||||
} else {
|
} else {
|
||||||
GetPatternRow(&Into::<Vec<u8>>::into(matrix.getRow(r)), pr)
|
matrix.getRow(r)
|
||||||
}
|
};
|
||||||
|
|
||||||
|
let pixel_states: Vec<bool> = row.into();
|
||||||
|
|
||||||
|
GetPatternRow(&pixel_states, pr)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn GetPatternRow<T: Into<PatternType> + Copy + Default + From<T>>(
|
pub fn GetPatternRow<T: Into<PatternType> + Copy + Default + From<T>>(
|
||||||
@@ -602,6 +641,8 @@ pub fn GetPatternRow<T: Into<PatternType> + Copy + Default + From<T>>(
|
|||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dbg!(&p_row.0);
|
||||||
|
|
||||||
if count != 0 {
|
if count != 0 {
|
||||||
p_row.0.push(count);
|
p_row.0.push(count);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,6 +183,15 @@ impl Reader for QrReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if detectorResult.is_err() {
|
||||||
|
for decode_function in [DetectPureQR, DetectPureMQR] {
|
||||||
|
detectorResult = decode_function(binImg);
|
||||||
|
if detectorResult.is_ok() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let detectorResult = detectorResult?;
|
let detectorResult = detectorResult?;
|
||||||
|
|
||||||
// let detectorResult: DetectorResult;
|
// let detectorResult: DetectorResult;
|
||||||
|
|||||||
@@ -4,13 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::{qrcode::cpp_port::decoder::Decode, common::BitMatrix, Exceptions};
|
use crate::{common::BitMatrix, qrcode::cpp_port::decoder::Decode, Exceptions};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM3L()
|
fn MQRCodeM3L() {
|
||||||
{
|
const CODE_STR: &str = r"XXXXXXX X X X X
|
||||||
const CODE_STR : &str =
|
|
||||||
r"XXXXXXX X X X X
|
|
||||||
X X X X
|
X X X X
|
||||||
X XXX X XXXXXXX
|
X XXX X XXXXXXX
|
||||||
X XXX X X X XX
|
X XXX X X X XX
|
||||||
@@ -26,18 +24,15 @@ X XXXXX XXX X X
|
|||||||
X X X XXX
|
X X X XXX
|
||||||
XXX XX X X XXXX
|
XXX XX X X XXXX
|
||||||
";
|
";
|
||||||
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR, "X", " ").unwrap();
|
||||||
"X", " ").unwrap();
|
|
||||||
|
|
||||||
let result = Decode(&bitMatrix).unwrap();
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
assert!(result.isValid());
|
assert!(result.isValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM3M()
|
fn MQRCodeM3M() {
|
||||||
{
|
const CODE_STR: &str = r"XXXXXXX X X X X
|
||||||
const CODE_STR : &str =
|
|
||||||
r"XXXXXXX X X X X
|
|
||||||
X X XX
|
X X XX
|
||||||
X XXX X X XX XX
|
X XXX X X XX XX
|
||||||
X XXX X X X
|
X XXX X X X
|
||||||
@@ -53,18 +48,15 @@ XX X X X
|
|||||||
X X X
|
X X X
|
||||||
X X XXXX XXX
|
X X XXXX XXX
|
||||||
";
|
";
|
||||||
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR, "X", " ").unwrap();
|
||||||
"X", " ").unwrap();
|
|
||||||
|
|
||||||
let result = Decode(&bitMatrix).unwrap();
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
assert!(result.isValid());
|
assert!(result.isValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM1()
|
fn MQRCodeM1() {
|
||||||
{
|
const CODE_STR: &str = r"XXXXXXX X X
|
||||||
const CODE_STR : &str =
|
|
||||||
r"XXXXXXX X X
|
|
||||||
X X
|
X X
|
||||||
X XXX X XXX
|
X XXX X XXX
|
||||||
X XXX X XX
|
X XXX X XX
|
||||||
@@ -76,18 +68,15 @@ XX X
|
|||||||
X XXXXX X
|
X XXXXX X
|
||||||
X XXXXXX X
|
X XXXXXX X
|
||||||
";
|
";
|
||||||
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR, "X", " ").unwrap();
|
||||||
"X", " ").unwrap();
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
let result = Decode(&bitMatrix).unwrap();
|
assert!(result.isValid());
|
||||||
assert!(result.isValid());
|
assert_eq!("123", result.text());
|
||||||
assert_eq!("123", result.text());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM1Error4Bits()
|
fn MQRCodeM1Error4Bits() {
|
||||||
{
|
const CODE_STR: &str = r"XXXXXXX X X
|
||||||
const CODE_STR : &str =
|
|
||||||
r"XXXXXXX X X
|
|
||||||
X X XX
|
X X XX
|
||||||
X XXX X X
|
X XXX X X
|
||||||
X XXX X XX
|
X XXX X XX
|
||||||
@@ -99,20 +88,20 @@ XX X
|
|||||||
X XXXXXX
|
X XXXXXX
|
||||||
X XXXXXXX
|
X XXXXXXX
|
||||||
";
|
";
|
||||||
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR, "X", " ").unwrap();
|
||||||
"X", " ").unwrap();
|
let result = Decode(&bitMatrix);
|
||||||
let result = Decode(&bitMatrix);
|
dbg!(&result);
|
||||||
dbg!(&result);
|
assert!(matches!(
|
||||||
assert!(matches!(result.err(), Some(Exceptions::ReedSolomonException(_))));
|
result.err(),
|
||||||
// assert_eq!(Error::Checksum, result.error());
|
Some(Exceptions::ReedSolomonException(_))
|
||||||
// assert!(result.text().is_empty());
|
));
|
||||||
|
// assert_eq!(Error::Checksum, result.error());
|
||||||
|
// assert!(result.text().is_empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM4()
|
fn MQRCodeM4() {
|
||||||
{
|
const CODE_STR: &str = r"XXXXXXX X X X X X
|
||||||
const CODE_STR : &str =
|
|
||||||
r"XXXXXXX X X X X X
|
|
||||||
X X XX X XX
|
X X XX X XX
|
||||||
X XXX X X X XX
|
X XXX X X X XX
|
||||||
X XXX X XX XX XX
|
X XXX X XX XX XX
|
||||||
@@ -130,8 +119,7 @@ X X XX XXXXX
|
|||||||
X X X X X
|
X X X X X
|
||||||
X XXXXXXX X X X
|
X XXXXXXX X X X
|
||||||
";
|
";
|
||||||
let bitMatrix = BitMatrix::parse_strings(CODE_STR,
|
let bitMatrix = BitMatrix::parse_strings(CODE_STR, "X", " ").unwrap();
|
||||||
"X", " ").unwrap();
|
let result = Decode(&bitMatrix).unwrap();
|
||||||
let result = Decode(&bitMatrix).unwrap();
|
assert!(result.isValid());
|
||||||
assert!(result.isValid());
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,15 @@
|
|||||||
*/
|
*/
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::{qrcode::cpp_port::{ bitmatrix_parser::{ReadFormatInformation, ReadCodewords, ReadVersion}}, common::BitMatrix};
|
use crate::{
|
||||||
|
common::BitMatrix,
|
||||||
|
qrcode::cpp_port::bitmatrix_parser::{ReadCodewords, ReadFormatInformation, ReadVersion},
|
||||||
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM3L()
|
fn MQRCodeM3L() {
|
||||||
{
|
let bitMatrix = BitMatrix::parse_strings(
|
||||||
let bitMatrix =
|
r"XXXXXXX X X X X
|
||||||
BitMatrix::parse_strings(
|
|
||||||
r"XXXXXXX X X X X
|
|
||||||
X X X X
|
X X X X
|
||||||
X XXX X XXXXXXX
|
X XXX X XXXXXXX
|
||||||
X XXX X X X XX
|
X XXX X X X XX
|
||||||
@@ -26,22 +27,26 @@ XXX XX XXXX XXX
|
|||||||
X XXXXX XXX X X
|
X XXXXX XXX X X
|
||||||
X X X XXX
|
X X X XXX
|
||||||
XXX XX X X XXXX
|
XXX XX X X XXXX
|
||||||
", "X", " ").expect("parse must parse");
|
",
|
||||||
|
"X",
|
||||||
|
" ",
|
||||||
|
)
|
||||||
|
.expect("parse must parse");
|
||||||
|
|
||||||
let version = ReadVersion(&bitMatrix).unwrap();
|
let version = ReadVersion(&bitMatrix).unwrap();
|
||||||
assert_eq!(3, version.getVersionNumber());
|
assert_eq!(3, version.getVersionNumber());
|
||||||
let format = ReadFormatInformation(&bitMatrix, true).expect("could not read format information");
|
let format =
|
||||||
let codewords = ReadCodewords(&bitMatrix, version, &format).expect("could not read codewords");
|
ReadFormatInformation(&bitMatrix, true).expect("could not read format information");
|
||||||
assert_eq!(17, codewords.len());
|
let codewords = ReadCodewords(&bitMatrix, version, &format).expect("could not read codewords");
|
||||||
assert_eq!(0x0, codewords[10]);
|
assert_eq!(17, codewords.len());
|
||||||
assert_eq!(0xd1, codewords[11]);
|
assert_eq!(0x0, codewords[10]);
|
||||||
|
assert_eq!(0xd1, codewords[11]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn MQRCodeM3M()
|
fn MQRCodeM3M() {
|
||||||
{
|
let bitMatrix = BitMatrix::parse_strings(
|
||||||
let bitMatrix = BitMatrix::parse_strings(
|
r"XXXXXXX X X X X
|
||||||
r"XXXXXXX X X X X
|
|
||||||
X X XX
|
X X XX
|
||||||
X XXX X X XX XX
|
X XXX X X XX XX
|
||||||
X XXX X X X
|
X XXX X X X
|
||||||
@@ -56,14 +61,18 @@ XX XX XXXXXXX
|
|||||||
XX X X X
|
XX X X X
|
||||||
X X X
|
X X X
|
||||||
X X XXXX XXX
|
X X XXXX XXX
|
||||||
"
|
",
|
||||||
,"X", " ").unwrap();
|
"X",
|
||||||
|
" ",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let version = ReadVersion(&bitMatrix).unwrap();
|
let version = ReadVersion(&bitMatrix).unwrap();
|
||||||
assert_eq!(3, version.getVersionNumber());
|
assert_eq!(3, version.getVersionNumber());
|
||||||
let format = ReadFormatInformation(&bitMatrix, true).expect("could not read format information");
|
let format =
|
||||||
let codewords = ReadCodewords(&bitMatrix, version, &format).expect("could not read codewords");
|
ReadFormatInformation(&bitMatrix, true).expect("could not read format information");
|
||||||
assert_eq!(17, codewords.len());
|
let codewords = ReadCodewords(&bitMatrix, version, &format).expect("could not read codewords");
|
||||||
assert_eq!(0x0, codewords[8]);
|
assert_eq!(17, codewords.len());
|
||||||
assert_eq!(0x89, codewords[9]);
|
assert_eq!(0x0, codewords[8]);
|
||||||
|
assert_eq!(0x89, codewords[9]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,160 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2017 Huy Cuong Nguyen
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*/
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
#include "BitMatrixIO.h"
|
|
||||||
#include "qrcode/QRWriter.h"
|
|
||||||
#include "qrcode/QRErrorCorrectionLevel.h"
|
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
using namespace ZXing;
|
|
||||||
using namespace ZXing::QRCode;
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
void DoTest(const std::wstring& contents, ErrorCorrectionLevel ecLevel, int resolution, const char* expected) {
|
|
||||||
Writer writer;
|
|
||||||
writer.setErrorCorrectionLevel(ecLevel);
|
|
||||||
auto matrix = writer.encode(contents, resolution, resolution);
|
|
||||||
auto actual = ToString(matrix, 'X', ' ', true);
|
|
||||||
EXPECT_EQ(matrix.width(), resolution);
|
|
||||||
EXPECT_EQ(matrix.height(), resolution);
|
|
||||||
EXPECT_EQ(actual, expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(QRWriterTest, OverSize)
|
|
||||||
{
|
|
||||||
// The QR should be multiplied up to fit, with extra padding if necessary
|
|
||||||
int bigEnough = 256;
|
|
||||||
Writer writer;
|
|
||||||
BitMatrix matrix = writer.encode(L"http://www.google.com/", bigEnough, bigEnough);
|
|
||||||
EXPECT_EQ(matrix.width(), bigEnough);
|
|
||||||
EXPECT_EQ(matrix.height(), bigEnough);
|
|
||||||
|
|
||||||
// The QR will not fit in this size, so the matrix should come back bigger
|
|
||||||
int tooSmall = 20;
|
|
||||||
matrix = writer.encode(L"http://www.google.com/", tooSmall, tooSmall);
|
|
||||||
EXPECT_GT(matrix.width(), tooSmall);
|
|
||||||
EXPECT_GT(matrix.height(), tooSmall);
|
|
||||||
|
|
||||||
// We should also be able to handle non-square requests by padding them
|
|
||||||
int strangeWidth = 500;
|
|
||||||
int strangeHeight = 100;
|
|
||||||
matrix = writer.encode(L"http://www.google.com/", strangeWidth, strangeHeight);
|
|
||||||
EXPECT_EQ(matrix.width(), strangeWidth);
|
|
||||||
EXPECT_EQ(matrix.height(), strangeHeight);
|
|
||||||
|
|
||||||
int overflowSize = 0x1000000;
|
|
||||||
EXPECT_THROW(writer.encode(L"http://www.google.com/", overflowSize, overflowSize), std::invalid_argument);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(QRWriterTest, RegressionTest)
|
|
||||||
{
|
|
||||||
DoTest(L"http://www.google.com/", ErrorCorrectionLevel::Medium, 99,
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
" \n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -11,4 +11,4 @@ mod QRDataMaskTest;
|
|||||||
|
|
||||||
mod QRBitMatrixParserTest;
|
mod QRBitMatrixParserTest;
|
||||||
|
|
||||||
mod MQRDecoderTest;
|
mod MQRDecoderTest;
|
||||||
|
|||||||
Reference in New Issue
Block a user