use crate::{
common::GlobalHistogramBinarizer,
oned::rss::{DataCharacterTrait, FinderPattern},
BinaryBitmap, BufferedImageLuminanceSource,
};
use super::RSSExpandedReader;
#[test]
fn testFindFinderPatterns() {
let image = readImage("2.png");
let binaryMap = BinaryBitmap::new(GlobalHistogramBinarizer::new(
BufferedImageLuminanceSource::new(image),
));
let rowNumber = binaryMap.get_height() as u32 / 2;
let row = binaryMap.get_black_row(rowNumber as usize).expect("ok");
let mut previousPairs = Vec::new();
let mut rssExpandedReader = RSSExpandedReader::new();
let pair1 = rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.expect("finder");
previousPairs.push(pair1.clone());
let mut finderPattern = pair1.getFinderPattern().as_ref().unwrap();
assert_eq!(0, finderPattern.getValue());
let pair2 = rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.expect("finder");
previousPairs.push(pair2.clone());
finderPattern = pair2.getFinderPattern().as_ref().unwrap();
assert_eq!(1, finderPattern.getValue());
let pair3 = rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.expect("finder");
previousPairs.push(pair3.clone());
finderPattern = pair3.getFinderPattern().as_ref().unwrap();
assert_eq!(1, finderPattern.getValue());
assert!(rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.is_err());
}
#[test]
fn testRetrieveNextPairPatterns() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(GlobalHistogramBinarizer::new(
BufferedImageLuminanceSource::new(image),
));
let rowNumber = binaryMap.get_height() as u32 / 2;
let row = binaryMap.get_black_row(rowNumber as usize).expect("create");
let mut previousPairs = Vec::new();
let mut rssExpandedReader = RSSExpandedReader::new();
let pair1 = rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.expect("finder");
previousPairs.push(pair1.clone());
let mut finderPattern = pair1.getFinderPattern().as_ref().unwrap();
assert_eq!(0, finderPattern.getValue());
let pair2 = rssExpandedReader
.retrieveNextPair(&row, &previousPairs, rowNumber)
.expect("finder");
previousPairs.push(pair2.clone());
finderPattern = pair2.getFinderPattern().as_ref().unwrap();
assert_eq!(0, finderPattern.getValue());
}
#[test]
fn testDecodeCheckCharacter() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(GlobalHistogramBinarizer::new(
BufferedImageLuminanceSource::new(image.clone()),
));
let row = binaryMap
.get_black_row(binaryMap.get_height() / 2)
.expect("create");
let startEnd = [145, 243]; let value = 0; let finderPatternA1 = FinderPattern::new(
value,
startEnd,
startEnd[0],
startEnd[1],
image.height() / 2,
);
let mut rssExpandedReader = RSSExpandedReader::new();
let dataCharacter = rssExpandedReader
.decodeDataCharacter(&row, &finderPatternA1, true, true)
.expect("decode");
assert_eq!(98, dataCharacter.getValue());
}
#[test]
fn testDecodeDataCharacter() {
let image = readImage("3.png");
let binaryMap = BinaryBitmap::new(GlobalHistogramBinarizer::new(
BufferedImageLuminanceSource::new(image.clone()),
));
let row = binaryMap
.get_black_row(binaryMap.get_height() / 2)
.expect("create");
let startEnd = [145, 243]; let value = 0; let finderPatternA1 = FinderPattern::new(
value,
startEnd,
startEnd[0],
startEnd[1],
image.height() / 2,
);
let mut rssExpandedReader = RSSExpandedReader::new();
let dataCharacter = rssExpandedReader
.decodeDataCharacter(&row, &finderPatternA1, true, false)
.expect("decode");
assert_eq!(19, dataCharacter.getValue());
assert_eq!(1007, dataCharacter.getChecksumPortion());
}
fn readImage(fileName: &str) -> image::DynamicImage {
image::open(format!("test_resources/blackbox/rssexpanded-1/{fileName}")).unwrap()
}