mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
tuple return makes more sense for picking blk size
This commit is contained in:
@@ -415,7 +415,7 @@ fn testAppendLengthInfo() {
|
||||
Version::getVersionForNumber(1).unwrap(),
|
||||
Mode::NUMERIC,
|
||||
&mut bits,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ........ .X", bits.to_string()); // 10 bits.
|
||||
let mut bits = BitArray::new();
|
||||
encoder::appendLengthInfo(
|
||||
@@ -423,7 +423,7 @@ fn testAppendLengthInfo() {
|
||||
Version::getVersionForNumber(10).unwrap(),
|
||||
Mode::ALPHANUMERIC,
|
||||
&mut bits,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ........ .X.", bits.to_string()); // 11 bits.
|
||||
let mut bits = BitArray::new();
|
||||
encoder::appendLengthInfo(
|
||||
@@ -431,7 +431,7 @@ fn testAppendLengthInfo() {
|
||||
Version::getVersionForNumber(27).unwrap(),
|
||||
Mode::BYTE,
|
||||
&mut bits,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits.
|
||||
let mut bits = BitArray::new();
|
||||
encoder::appendLengthInfo(
|
||||
@@ -439,7 +439,7 @@ fn testAppendLengthInfo() {
|
||||
Version::getVersionForNumber(40).unwrap(),
|
||||
Mode::KANJI,
|
||||
&mut bits,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ..X..... ....", bits.to_string()); // 12 bits.
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@ fn testAppendBytes() {
|
||||
Mode::NUMERIC,
|
||||
&mut bits,
|
||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ...X", bits.to_string());
|
||||
// Should use appendAlphanumericBytes.
|
||||
// A = 10 = 0xa = 001010 in 6 bits
|
||||
@@ -463,7 +463,7 @@ fn testAppendBytes() {
|
||||
Mode::ALPHANUMERIC,
|
||||
&mut bits,
|
||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" ..X.X.", bits.to_string());
|
||||
// Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC.
|
||||
//try {
|
||||
@@ -488,7 +488,7 @@ fn testAppendBytes() {
|
||||
Mode::BYTE,
|
||||
&mut bits,
|
||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
|
||||
// Anything can be encoded in QRCode.MODE_8BIT_BYTE.
|
||||
encoder::appendBytes(
|
||||
@@ -496,7 +496,7 @@ fn testAppendBytes() {
|
||||
Mode::BYTE,
|
||||
&mut bits,
|
||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||
);
|
||||
).expect("ok");
|
||||
// Should use appendKanjiBytes.
|
||||
// 0x93, 0x5f
|
||||
let mut bits = BitArray::new();
|
||||
@@ -505,7 +505,7 @@ fn testAppendBytes() {
|
||||
Mode::KANJI,
|
||||
&mut bits,
|
||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||
);
|
||||
).expect("ok");
|
||||
assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
|
||||
}
|
||||
|
||||
@@ -540,95 +540,82 @@ fn testTerminateBits() {
|
||||
|
||||
#[test]
|
||||
fn testGetNumDataBytesAndNumECBytesForBlockID() {
|
||||
let mut numDataBytes = vec![0; 1];
|
||||
let mut numEcBytes = vec![0; 1];
|
||||
|
||||
// Version 1-H.
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
let (numDataBytes,numEcBytes) = encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
26,
|
||||
9,
|
||||
1,
|
||||
0,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(9, numDataBytes[0]);
|
||||
assert_eq!(17, numEcBytes[0]);
|
||||
).expect("ok");
|
||||
assert_eq!(9, numDataBytes);
|
||||
assert_eq!(17, numEcBytes);
|
||||
|
||||
// Version 3-H. 2 blocks.
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
70,
|
||||
26,
|
||||
2,
|
||||
0,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(13, numDataBytes[0]);
|
||||
assert_eq!(22, numEcBytes[0]);
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
).expect("ok");
|
||||
assert_eq!(13, numDataBytes);
|
||||
assert_eq!(22, numEcBytes);
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
70,
|
||||
26,
|
||||
2,
|
||||
1,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(13, numDataBytes[0]);
|
||||
assert_eq!(22, numEcBytes[0]);
|
||||
).expect("ok");
|
||||
assert_eq!(13, numDataBytes);
|
||||
assert_eq!(22, numEcBytes);
|
||||
|
||||
// Version 7-H. (4 + 1) blocks.
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
196,
|
||||
66,
|
||||
5,
|
||||
0,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(13, numDataBytes[0]);
|
||||
assert_eq!(26, numEcBytes[0]);
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
|
||||
).expect("ok");
|
||||
assert_eq!(13, numDataBytes);
|
||||
assert_eq!(26, numEcBytes);
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
196,
|
||||
66,
|
||||
5,
|
||||
4,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(14, numDataBytes[0]);
|
||||
assert_eq!(26, numEcBytes[0]);
|
||||
|
||||
).expect("ok");
|
||||
assert_eq!(14, numDataBytes);
|
||||
assert_eq!(26, numEcBytes);
|
||||
|
||||
// Version 40-H. (20 + 61) blocks.
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
3706,
|
||||
1276,
|
||||
81,
|
||||
0,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(15, numDataBytes[0]);
|
||||
assert_eq!(30, numEcBytes[0]);
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
).expect("ok");
|
||||
assert_eq!(15, numDataBytes);
|
||||
assert_eq!(30, numEcBytes);
|
||||
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
3706,
|
||||
1276,
|
||||
81,
|
||||
20,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(16, numDataBytes[0]);
|
||||
assert_eq!(30, numEcBytes[0]);
|
||||
encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
).expect("ok");
|
||||
assert_eq!(16, numDataBytes);
|
||||
assert_eq!(30, numEcBytes);
|
||||
|
||||
let (numDataBytes,numEcBytes) =encoder::getNumDataBytesAndNumECBytesForBlockID(
|
||||
3706,
|
||||
1276,
|
||||
81,
|
||||
80,
|
||||
&mut numDataBytes,
|
||||
&mut numEcBytes,
|
||||
);
|
||||
assert_eq!(16, numDataBytes[0]);
|
||||
assert_eq!(30, numEcBytes[0]);
|
||||
).expect("ok");
|
||||
assert_eq!(16, numDataBytes);
|
||||
assert_eq!(30, numEcBytes);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -637,7 +624,7 @@ fn testInterleaveWithECBytes() {
|
||||
let mut in_ = BitArray::new();
|
||||
for dataByte in dataBytes {
|
||||
// for (byte dataByte: dataBytes) {
|
||||
in_.appendBits(*dataByte, 8);
|
||||
in_.appendBits(*dataByte, 8).expect("ok");
|
||||
}
|
||||
let out = encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode");
|
||||
let expected = &[
|
||||
@@ -663,7 +650,7 @@ fn testInterleaveWithECBytes() {
|
||||
in_ = BitArray::new();
|
||||
for dataByte in dataBytes {
|
||||
// for (byte dataByte: dataBytes) {
|
||||
in_.appendBits(*dataByte, 8);
|
||||
in_.appendBits(*dataByte, 8).expect("ok");
|
||||
}
|
||||
|
||||
let out = encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok");
|
||||
@@ -843,7 +830,7 @@ fn testBugInBitVectorNumBytes() {
|
||||
// for (int x = 0; x < 3518; x++) {
|
||||
builder.push('0');
|
||||
}
|
||||
encoder::encode(&builder, ErrorCorrectionLevel::L);
|
||||
assert!(encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -493,9 +493,9 @@ pub fn getNumDataBytesAndNumECBytesForBlockID(
|
||||
numDataBytes: u32,
|
||||
numRSBlocks: u32,
|
||||
blockID: u32,
|
||||
numDataBytesInBlock: &mut [u32],
|
||||
numECBytesInBlock: &mut [u32],
|
||||
) -> Result<(), Exceptions> {
|
||||
// numDataBytesInBlock: &mut [u32],
|
||||
// numECBytesInBlock: &mut [u32],
|
||||
) -> Result<(u32,u32), Exceptions> {
|
||||
if blockID >= numRSBlocks {
|
||||
return Err(Exceptions::WriterException("Block ID too large".to_owned()));
|
||||
// throw new WriterException("Block ID too large");
|
||||
@@ -540,14 +540,11 @@ pub fn getNumDataBytesAndNumECBytesForBlockID(
|
||||
// throw new WriterException("Total bytes mismatch");
|
||||
}
|
||||
|
||||
if blockID < numRsBlocksInGroup1 {
|
||||
numDataBytesInBlock[0] = numDataBytesInGroup1;
|
||||
numECBytesInBlock[0] = numEcBytesInGroup1;
|
||||
Ok(if blockID < numRsBlocksInGroup1 {
|
||||
(numDataBytesInGroup1,numEcBytesInGroup1)
|
||||
} else {
|
||||
numDataBytesInBlock[0] = numDataBytesInGroup2;
|
||||
numECBytesInBlock[0] = numEcBytesInGroup2;
|
||||
}
|
||||
Ok(())
|
||||
(numDataBytesInGroup2,numEcBytesInGroup2)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -578,26 +575,26 @@ pub fn interleaveWithECBytes(
|
||||
|
||||
for i in 0..numRSBlocks {
|
||||
// for (int i = 0; i < numRSBlocks; ++i) {
|
||||
let mut numDataBytesInBlock = vec![0; 1]; //new int[1];
|
||||
let mut numEcBytesInBlock = vec![0; 1]; //new int[1];
|
||||
getNumDataBytesAndNumECBytesForBlockID(
|
||||
// let mut numDataBytesInBlock = vec![0; 1]; //new int[1];
|
||||
// let mut numEcBytesInBlock = vec![0; 1]; //new int[1];
|
||||
let (numDataBytesInBlock, numEcBytesInBlock) = getNumDataBytesAndNumECBytesForBlockID(
|
||||
numTotalBytes,
|
||||
numDataBytes,
|
||||
numRSBlocks,
|
||||
i,
|
||||
&mut numDataBytesInBlock,
|
||||
&mut numEcBytesInBlock,
|
||||
// &mut numDataBytesInBlock,
|
||||
// &mut numEcBytesInBlock,
|
||||
)?;
|
||||
|
||||
let size = numDataBytesInBlock[0];
|
||||
let size = numDataBytesInBlock;
|
||||
let mut dataBytes = vec![0u8; size as usize];
|
||||
bits.toBytes(8 * dataBytesOffset, &mut dataBytes, 0, size as usize);
|
||||
let ecBytes = generateECBytes(&dataBytes, numEcBytesInBlock[0] as usize);
|
||||
let ecBytes = generateECBytes(&dataBytes, numEcBytesInBlock as usize);
|
||||
blocks.push(BlockPair::new(dataBytes, ecBytes.clone()));
|
||||
|
||||
maxNumDataBytes = maxNumDataBytes.max(size);
|
||||
maxNumEcBytes = maxNumEcBytes.max(ecBytes.len());
|
||||
dataBytesOffset += numDataBytesInBlock[0] as usize;
|
||||
dataBytesOffset += numDataBytesInBlock as usize;
|
||||
}
|
||||
if numDataBytes != dataBytesOffset as u32 {
|
||||
return Err(Exceptions::WriterException(
|
||||
@@ -624,12 +621,12 @@ pub fn interleaveWithECBytes(
|
||||
for block in &blocks {
|
||||
// for (BlockPair block : blocks) {
|
||||
let ecBytes = block.getErrorCorrectionBytes();
|
||||
if (i < ecBytes.len()) {
|
||||
if i < ecBytes.len() {
|
||||
result.appendBits(ecBytes[i] as u32, 8)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (numTotalBytes != result.getSizeInBytes() as u32) {
|
||||
if numTotalBytes != result.getSizeInBytes() as u32 {
|
||||
// Should be same.
|
||||
return Err(Exceptions::WriterException(format!(
|
||||
"Interleaving error: {} and {} differ.",
|
||||
@@ -654,7 +651,7 @@ pub fn generateECBytes(dataBytes: &[u8], numEcBytesInBlock: usize) -> Vec<u8> {
|
||||
ReedSolomonEncoder::new(get_predefined_genericgf(
|
||||
PredefinedGenericGF::QrCodeField256,
|
||||
))
|
||||
.encode(&mut toEncode, numEcBytesInBlock);
|
||||
.encode(&mut toEncode, numEcBytesInBlock).expect("rs encode must complete");
|
||||
|
||||
let mut ecBytes = vec![0u8; numEcBytesInBlock];
|
||||
for i in 0..numEcBytesInBlock {
|
||||
|
||||
Reference in New Issue
Block a user