non passing aztec decoder port

This commit is contained in:
Henry Schimke
2022-09-19 21:48:40 -05:00
parent 3cb5973be2
commit 1b3535c0df
13 changed files with 1131 additions and 894 deletions

285
src/aztec/DecoderTest.rs Normal file
View File

@@ -0,0 +1,285 @@
/*
* Copyright 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// package com.google.zxing.aztec.decoder;
// import com.google.zxing.aztec.encoder.EncoderTest;
// import com.google.zxing.FormatException;
// import com.google.zxing.RXingResultPoint;
// import com.google.zxing.aztec.AztecDetectorRXingResult;
// import com.google.zxing.common.BitArray;
// import com.google.zxing.common.BitMatrix;
// import com.google.zxing.common.DecoderRXingResult;
// import org.junit.Test;
// import org.junit.Assert;
use crate::{
aztec::shared_test_methods::{stripSpace, toBitArray, toBooleanArray},
common::BitMatrix,
RXingResultPoint,
};
use super::{decoder, AztecDetectorResult::AztecDetectorRXingResult};
/**
* Tests {@link Decoder}.
*/
const NO_POINTS: &[RXingResultPoint] = &[RXingResultPoint { x: 0.0, y: 0.0 }; 0];
#[test]
fn testHighLevelDecode() {
// no ECI codes
testHighLevelDecodeString(
"A. b.",
// 'A' P/S '. ' L/L b D/L '.'
"...X. ..... ...XX XXX.. ...XX XXXX. XX.X",
);
// initial ECI code 26 (switch to UTF-8)
testHighLevelDecodeString(
"Ça",
// P/S FLG(n) 2 '2' '6' B/S 2 0xc3 0x87 L/L 'a'
"..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.",
);
// initial character without ECI (must be interpreted as ISO_8859_1)
// followed by ECI code 26 (= UTF-8) and UTF-8 text
testHighLevelDecodeString(
"±Ça",
// B/S 1 0xb1 P/S FLG(n) 2 '2' '6' B/S 2 0xc3 0x87 L/L 'a'
"XXXXX ....X X.XX...X ..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.",
);
// GS1 data
testHighLevelDecodeString(
"101233742",
// P/S FLG(n) 0 D/L 1 0 1 2 3 P/S FLG(n) 0 3 7 4 2
"..... ..... ... XXXX. ..XX ..X. ..XX .X.. .X.X .... ..... ... .X.X X..X .XX. .X..",
);
}
fn testHighLevelDecodeString(expectedString: &str, b: &str) {
let bits = toBitArray(&stripSpace(b));
assert_eq!(
expectedString,
decoder::highLevelDecode(&toBooleanArray(&bits)).expect("highLevelDecode Failed"),
"highLevelDecode() failed for input bits: {}",
b
);
}
#[test]
fn testAztecRXingResult() {
let matrix = BitMatrix::parse_strings(
r"X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X
X X X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X
X X X X X X X X X X X X X X X X X X
X X X X X X X X X
X X X X X X X X X X X X X X X X X
X X X X X X X X X
X X X X X X X X X X X X X X X X
X X X X X X X X X X X X
X X X X X X X X X X X
X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X
X X X X X X X X X X X
X X X X X X X X X X X X X X
X X X X X X X X
X X X X X X X X X X X X X X X X X X X
X X X X X X X X X
X X X X X X X X X X X X X X X
X X X X X X X X X X X X
X X X X X X X X X X X X X X
X X X X X X X X X X X X X
",
"X ",
" ",
)
.expect("Bitmatrix should init");
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), false, 30, 2);
let result = decoder::decode(&r).expect("decoder should init");
assert_eq!("88888TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", result.getText());
assert_eq!(
&vec![
-11i8 as u8,
85,
85,
117,
107,
90,
-42i8 as u8,
-75i8 as u8,
-83i8 as u8,
107,
90,
-42i8 as u8,
-75i8 as u8,
-83i8 as u8,
107,
90,
-42i8 as u8,
-75i8 as u8,
-83i8 as u8,
107,
90,
-42i8 as u8,
-80i8 as u8
],
result.getRawBytes()
);
assert_eq!(180, result.getNumBits());
}
#[test]
fn testAztecRXingResultECI() {
let matrix = BitMatrix::parse_strings(
r" X X X X X X
X X X X X X X X X X X X
X X X X
X X X X X X X X X X X X X X X X X
X X
X X X X X X X X X X X X
X X X X X X X X
X X X X X X X X X X X X
X X X X X X X X
X X X X X X X X X
X X X X X X X X X
X X X X X X X X X X X X
X X X X X X
X X X X X X X X X X X X X
X X X
X X X X X X X X X X X X X X X X X
X X X X X X X X X
X X X X X X X X X X X
X X X X X X X X ",
"X ",
" ",
)
.expect("string parse success");
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), false, 15, 1);
let result = decoder::decode(&r).expect("decode success");
assert_eq!("Français", result.getText());
}
#[test]
#[should_panic]
fn testDecodeTooManyErrors() {
let matrix = BitMatrix::parse_strings(
r"
X X . X . . . X X . . . X . . X X X . X . X X X X X .
X X . . X X . . . . . X X . . . X X . . . X . X . . X
X . . . X X . . X X X . X X . X X X X . X X . . X . .
. . . . X . X X . . X X . X X . X . X X X X . X . . X
X X X . . X X X X X . . . . . X X . . . X . X . X . X
X X . . . . . . . . X . . . X . X X X . X . . X . . .
X X . . X . . . . . X X . . . . . X . . . . X . . X X \
. . . X . X . X . . . . . X X X X X X . . . . . . X X
X . . . X . X X X X X X . . X X X . X . X X X X X X .
X . . X X X . X X X X X X X X X X X X X . . . X . X X
. . . . X X . . . X . . . . . . . X X . . . X X . X .
. . . X X X . . X X . X X X X X . X . . X . . . . . .
X . . . . X . X . X . X . . . X . X . X X . X X . X X
X . X . . X . X . X . X . X . X . X . . . . . X . X X
X . X X X . . X . X . X . . . X . X . X X X . . . X X
X X X X X X X X . X . X X X X X . X . X . X . X X X .
. . . . . . . X . X . . . . . . . X X X X . . . X X X
X X . . X . . X . X X X X X X X X X X X X X . . X . X
X X X . X X X X . . X X X X . . X . . . . X . . X X X
. . . . X . X X X . . . . X X X X . . X X X X . . . .
. . X . . X . X . . . X . X X . X X . X . . . X . X .
X X . . X . . X X X X X X X . . X . X X X X X X X . .
X . X X . . X X . . . . . X . . . . . . X X . X X X .
X . . X X . . X X . X . X . . . . X . X . . X . . X .
X . X . X . . X . X X X X X X X X . X X X X . . X X .
X X X X . . . X . . X X X . X X . . X . . . . X X X .
X X . X . X . . . X . X . . . . X X . X . . X X . . . ",
"X ",
". ",
)
.expect("parse string success");
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), true, 16, 4);
decoder::decode(&r);
}
#[test]
#[should_panic]
fn testDecodeTooManyErrors2() {
let matrix = BitMatrix::parse_strings(
r"
. X X . . X . X X . . . X . . X X X . . . X X . X X .
X X . X X . . X . . . X X . . . X X . X X X . X . X X
. . . . X . . . X X X . X X . X X X X . X X . . X . .
X . X X . . X . . . X X . X X . X . X X . . . . . X .
X X . X . . X . X X . . . . . X X . . . . . X . . . X
X . . X . . . . . . X . . . X . X X X X X X X . . . X
X . . X X . . X . . X X . . . . . X . . . . . X X X .
. . X X X X . X . . . . . X X X X X X . . . . . . X X
X . . . X . X X X X X X . . X X X . X . X X X X X X .
X . . X X X . X X X X X X X X X X X X X . . . X . X X
. . . . X X . . . X . . . . . . . X X . . . X X . X .
. . . X X X . . X X . X X X X X . X . . X . . . . . .
X . . . . X . X . X . X . . . X . X . X X . X X . X X
X . X . . X . X . X . X . X . X . X . . . . . X . X X
X . X X X . . X . X . X . . . X . X . X X X . . . X X
X X X X X X X X . X . X X X X X . X . X . X . X X X .
. . . . . . . X . X . . . . . . . X X X X . . . X X X
X X . . X . . X . X X X X X X X X X X X X X . . X . X
X X X . X X X X . . X X X X . . X . . . . X . . X X X
. . X X X X X . X . . . . X X X X . . X X X . X . X .
. . X X . X . X . . . X . X X . X X . . . . X X . . .
X . . . X . X . X X X X X X . . X . X X X X X . X . .
. X . . . X X X . . . . . X . . . . . X X X X X . X .
X . . X . X X X X . X . X . . . . X . X X . X . . X .
X . . . X X . X . X X X X X X X X . X X X X . . X X .
. X X X X . . X . . X X X . X X . . X . . . . X X X .
X X . . . X X . . X . X . . . . X X . X . . X . X . X ",
"X ",
". ",
)
.expect("String Parse OK");
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), true, 16, 4);
decoder::decode(&r);
}
#[test]
fn testRawBytes() {
let bool0 = vec![false; 0];
let bool1 = vec![true];
let bool7 = vec![true, false, true, false, true, false, true];
let bool8 = vec![true, false, true, false, true, false, true, false];
let bool9 = vec![true, false, true, false, true, false, true, false, true];
let bool16 = vec![
false, true, true, false, false, false, true, true, true, true, false, false, false, false,
false, true,
];
let byte0 = vec![0u8; 0];
let byte1 = vec![-128i8 as u8];
let byte7 = vec![-86i8 as u8];
let byte8 = vec![-86i8 as u8];
let byte9 = vec![-86i8 as u8, -128i8 as u8];
let byte16 = vec![99, -63i8 as u8];
assert_eq!(byte0, decoder::convertBoolArrayToByteArray(&bool0));
assert_eq!(byte1, decoder::convertBoolArrayToByteArray(&bool1));
assert_eq!(byte7, decoder::convertBoolArrayToByteArray(&bool7));
assert_eq!(byte8, decoder::convertBoolArrayToByteArray(&bool8));
assert_eq!(byte9, decoder::convertBoolArrayToByteArray(&bool9));
assert_eq!(byte16, decoder::convertBoolArrayToByteArray(&bool16));
}