Converted if-panic!() in Rust code to assert!() or assert_eq!(), without changing behavior.

This commit is contained in:
Project Nayuki 2017-08-27 00:21:23 +00:00
parent 188a368796
commit 358fa7af57
1 changed files with 15 additions and 42 deletions

View File

@ -54,9 +54,7 @@ impl QrCode {
pub fn encode_codewords(ver: u8, ecl: &'static QrCodeEcc, datacodewords: &[u8], mask: i8) -> QrCode { pub fn encode_codewords(ver: u8, ecl: &'static QrCodeEcc, datacodewords: &[u8], mask: i8) -> QrCode {
// Check arguments // Check arguments
if ver < 1 || ver > 40 || mask < -1 || mask > 7 { assert!(1 <= ver && ver <= 40 && -1 <= mask && mask <= 7, "Value out of range");
panic!("Value out of range");
}
// Initialize fields // Initialize fields
let size: usize = (ver as usize) * 4 + 17; let size: usize = (ver as usize) * 4 + 17;
@ -80,9 +78,7 @@ impl QrCode {
pub fn remask(qr: &QrCode, mask: i8) -> QrCode { pub fn remask(qr: &QrCode, mask: i8) -> QrCode {
// Check arguments // Check arguments
if mask < -1 || mask > 7 { assert!(-1 <= mask && mask <= 7, "Mask out of range");
panic!("Mask value out of range");
}
// Copy fields // Copy fields
let mut result = QrCode { let mut result = QrCode {
@ -188,9 +184,7 @@ impl QrCode {
} }
data = data << 10 | rem; data = data << 10 | rem;
data ^= 0x5412; // uint15 data ^= 0x5412; // uint15
if data >> 15 != 0 { assert_eq!(data >> 15, 0, "Assertion error");
panic!("Assertion error");
}
// Draw first copy // Draw first copy
for i in 0 .. 6 { for i in 0 .. 6 {
@ -227,9 +221,7 @@ impl QrCode {
rem = (rem << 1) ^ ((rem >> 11) * 0x1F25); rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
} }
let data: u32 = (self.version as u32) << 12 | rem; // uint18 let data: u32 = (self.version as u32) << 12 | rem; // uint18
if data >> 18 != 0 { assert!(data >> 18 == 0, "Assertion error");
panic!("Assertion error");
}
// Draw two copies // Draw two copies
for i in 0 .. 18 { for i in 0 .. 18 {
@ -280,9 +272,7 @@ impl QrCode {
// Returns a new byte string representing the given data with the appropriate error correction // Returns a new byte string representing the given data with the appropriate error correction
// codewords appended to it, based on this object's version and error correction level. // codewords appended to it, based on this object's version and error correction level.
fn append_error_correction(&self, data: &[u8]) -> Vec<u8> { fn append_error_correction(&self, data: &[u8]) -> Vec<u8> {
if data.len() != QrCode::get_num_data_codewords(self.version, self.errorcorrectionlevel) { assert_eq!(data.len(), QrCode::get_num_data_codewords(self.version, self.errorcorrectionlevel), "Illegal argument");
panic!("Illegal argument");
}
// Calculate parameter numbers // Calculate parameter numbers
let numblocks: usize = QrCode::table_get(&QrCode_NUM_ERROR_CORRECTION_BLOCKS, self.version, self.errorcorrectionlevel); let numblocks: usize = QrCode::table_get(&QrCode_NUM_ERROR_CORRECTION_BLOCKS, self.version, self.errorcorrectionlevel);
@ -324,9 +314,7 @@ impl QrCode {
// Draws the given sequence of 8-bit codewords (data and error correction) onto the entire // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire
// data area of this QR Code symbol. Function modules need to be marked off before this is called. // data area of this QR Code symbol. Function modules need to be marked off before this is called.
fn draw_codewords(&mut self, data: &[u8]) { fn draw_codewords(&mut self, data: &[u8]) {
if data.len() != QrCode::get_num_raw_data_modules(self.version) / 8 { assert_eq!(data.len(), QrCode::get_num_raw_data_modules(self.version) / 8, "Illegal argument");
panic!("Illegal argument");
}
let mut i: usize = 0; // Bit index into the data let mut i: usize = 0; // Bit index into the data
// Do the funny zigzag scan // Do the funny zigzag scan
@ -350,9 +338,7 @@ impl QrCode {
} }
right -= 2; right -= 2;
} }
if i != data.len() * 8 { assert_eq!(i, data.len() * 8, "Assertion error");
panic!("Assertion error");
}
} }
@ -361,9 +347,7 @@ impl QrCode {
// This means it is possible to apply a mask, undo it, and try another mask. Note that a final // This means it is possible to apply a mask, undo it, and try another mask. Note that a final
// well-formed QR Code symbol needs exactly one mask applied (not zero, not two, etc.). // well-formed QR Code symbol needs exactly one mask applied (not zero, not two, etc.).
fn apply_mask(&mut self, mask: u8) { fn apply_mask(&mut self, mask: u8) {
if mask > 7 { assert!(mask <= 7, "Mask value out of range");
panic!("Mask value out of range");
}
for y in 0 .. self.size { for y in 0 .. self.size {
for x in 0 .. self.size { for x in 0 .. self.size {
let invert: bool = match mask { let invert: bool = match mask {
@ -400,9 +384,7 @@ impl QrCode {
self.apply_mask(i); // Undoes the mask due to XOR self.apply_mask(i); // Undoes the mask due to XOR
} }
} }
if mask < 0 || mask > 7 { assert!(0 <= mask && mask <= 7, "Assertion error");
panic!("Assertion error");
}
self.draw_format_bits(mask as u8); // Overwrite old format bits self.draw_format_bits(mask as u8); // Overwrite old format bits
self.apply_mask(mask as u8); // Apply the final choice of mask self.apply_mask(mask as u8); // Apply the final choice of mask
self.mask = mask as u8; self.mask = mask as u8;
@ -507,9 +489,8 @@ impl QrCode {
// used on both the x and y axes. Each value in the resulting array is in the range [0, 177). // used on both the x and y axes. Each value in the resulting array is in the range [0, 177).
// This stateless pure function could be implemented as table of 40 variable-length lists of unsigned bytes. // This stateless pure function could be implemented as table of 40 variable-length lists of unsigned bytes.
fn get_alignment_pattern_positions(ver: u8) -> Vec<i32> { fn get_alignment_pattern_positions(ver: u8) -> Vec<i32> {
if ver < 1 || ver > 40 { assert!(1 <= ver && ver <= 40, "Version number out of range");
panic!("Version number out of range"); if ver == 1 {
} else if ver == 1 {
vec![] vec![]
} else { } else {
let numalign: i32 = (ver as i32) / 7 + 2; let numalign: i32 = (ver as i32) / 7 + 2;
@ -534,9 +515,7 @@ impl QrCode {
// all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8. // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.
// The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table. // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.
fn get_num_raw_data_modules(ver: u8) -> usize { fn get_num_raw_data_modules(ver: u8) -> usize {
if ver < 1 || ver > 40 { assert!(1 <= ver && ver <= 40, "Version number out of range");
panic!("Version number out of range");
}
let mut result: usize = (16 * (ver as usize) + 128) * (ver as usize) + 64; let mut result: usize = (16 * (ver as usize) + 128) * (ver as usize) + 64;
if ver >= 2 { if ver >= 2 {
let numalign: usize = (ver as usize) / 7 + 2; let numalign: usize = (ver as usize) / 7 + 2;
@ -553,9 +532,7 @@ impl QrCode {
// QR Code of the given version number and error correction level, with remainder bits discarded. // QR Code of the given version number and error correction level, with remainder bits discarded.
// This stateless pure function could be implemented as a (40*4)-cell lookup table. // This stateless pure function could be implemented as a (40*4)-cell lookup table.
fn get_num_data_codewords(ver: u8, ecl: &QrCodeEcc) -> usize { fn get_num_data_codewords(ver: u8, ecl: &QrCodeEcc) -> usize {
if ver < 1 || ver > 40 { assert!(1 <= ver && ver <= 40, "Version number out of range");
panic!("Version number out of range");
}
QrCode::get_num_raw_data_modules(ver) / 8 QrCode::get_num_raw_data_modules(ver) / 8
- QrCode::table_get(&QrCode_ECC_CODEWORDS_PER_BLOCK, ver, ecl) - QrCode::table_get(&QrCode_ECC_CODEWORDS_PER_BLOCK, ver, ecl)
* QrCode::table_get(&QrCode_NUM_ERROR_CORRECTION_BLOCKS, ver, ecl) * QrCode::table_get(&QrCode_NUM_ERROR_CORRECTION_BLOCKS, ver, ecl)
@ -632,9 +609,7 @@ struct ReedSolomonGenerator {
impl ReedSolomonGenerator { impl ReedSolomonGenerator {
fn new(degree: usize) -> ReedSolomonGenerator { fn new(degree: usize) -> ReedSolomonGenerator {
if degree < 1 || degree > 255 { assert!(1 <= degree && degree <= 255, "Degree out of range");
panic!("Degree out of range");
}
// Start with the monomial x^0 // Start with the monomial x^0
let mut coefs = vec![0; degree - 1]; let mut coefs = vec![0; degree - 1];
coefs.push(1); coefs.push(1);
@ -767,9 +742,7 @@ pub static QrSegmentMode_ECI : QrSegmentMode = QrSegmentMode { modebits:
// Appends the given number of bits of the given value to this sequence. // Appends the given number of bits of the given value to this sequence.
fn append_bits(bb: &mut Vec<bool>, val: u32, len: u8) { fn append_bits(bb: &mut Vec<bool>, val: u32, len: u8) {
if len < 32 && (val >> len) != 0 || len > 32 { assert!(len < 32 && (val >> len) == 0 || len == 32, "Value out of range");
panic!("Value out of range");
}
for i in (0 .. len).rev() { // Append bit by bit for i in (0 .. len).rev() { // Append bit by bit
bb.push((val >> i) & 1 != 0); bb.push((val >> i) & 1 != 0);
} }