use crate::{
common::Result,
qrcode::decoder::{ErrorCorrectionLevel, Version},
};
#[test]
#[should_panic]
fn testBadVersion() {
assert!(Version::getVersionForNumber(0).is_ok());
}
#[test]
fn testVersionForNumber() {
for i in 1..=40 {
checkVersion(Version::getVersionForNumber(i), i, 4 * i + 17);
}
}
fn checkVersion(version: Result<&Version>, number: u32, dimension: u32) {
assert!(version.is_ok());
let version = version.unwrap();
assert_eq!(number, version.getVersionNumber());
if number > 1 {
assert!(!version.getAlignmentPatternCenters().is_empty());
}
assert_eq!(dimension, version.getDimensionForVersion());
let _tmp = version.getECBlocksForLevel(ErrorCorrectionLevel::H);
let _tmp = version.getECBlocksForLevel(ErrorCorrectionLevel::L);
let _tmp = version.getECBlocksForLevel(ErrorCorrectionLevel::M);
let _tmp = version.getECBlocksForLevel(ErrorCorrectionLevel::Q);
assert!(version.buildFunctionPattern().is_ok());
}
#[test]
fn testGetProvisionalVersionForDimension() {
for i in 1..=40 {
assert_eq!(
i,
Version::getProvisionalVersionForDimension(4 * i + 17)
.expect("must exist for supplied values")
.getVersionNumber()
);
}
}
#[test]
fn testDecodeVersionInformation() {
doTestVersion(7, 0x07C94);
doTestVersion(12, 0x0C762);
doTestVersion(17, 0x1145D);
doTestVersion(22, 0x168C9);
doTestVersion(27, 0x1B08E);
doTestVersion(32, 0x209D5);
}
fn doTestVersion(expectedVersion: u32, mask: u32) {
let version = Version::decodeVersionInformation(mask);
assert!(version.is_ok());
assert_eq!(expectedVersion, version.unwrap().getVersionNumber());
}