def test_dual_formats_one_right_one_wrong(self): samples = [ 0b010001111010110, # L0 0b011001000111101, # L4 0b000111101011001, # M3 0b001101110000101, # M6 0b110101100100011, # Q2 0b111010110010001, # Q5 0b100011110101100, # H1 0b101110000101001, # H7 ] for sample in samples: self.assertEqual(sample >> 10, validate_format_info(sample, sample)) self.assertEqual(sample >> 10, validate_format_info(sample ^ 0b111100000000000, sample ^ 0b000100000011101))
def _read_format_information(self): print('ImageScanner._read_format_information: {}'.format( self._was_read)) ''' Read 5 data bits and 10 BCH bits ''' # Read both locations source_1 = (self._get_straight_bits( (8, -7), 7, 'd') << 8) + self._get_straight_bits((-1, 8), 8, 'l') source_2 = (self._get_straight_bits( (7, 8), 8, 'l', (1, )) << 8) + self._get_straight_bits( (8, 0), 9, 'd', (6, )) print('FI1: ', source_1) print('FI2: ', source_2) # FORMAT_INFO_MASK = 0b101010000010010 format_info = validate_format_info(source_1 ^ FORMAT_INFO_MASK, source_2 ^ FORMAT_INFO_MASK) print('format information: {:b}'.format(format_info)) print('format information: {:b}'.format(format_info >> 3)) self.info.error_correction_level = ec_level_from_format_info_code( format_info >> 3) print('EC level: {}'.format(self.info.error_correction_level)) self.info.mask_id = format_info & 0b111 return
def _read_format_info(self): source_1 = (self._get_straight_bits((8, -7), 7, 'd') << 8) + self._get_straight_bits((-1, 8), 8, 'l') source_2 = (self._get_straight_bits((7, 8), 8, 'l', (1,)) << 8) + self._get_straight_bits((8, 0), 9, 'd', (6,)) format_info = validate_format_info(source_1 ^ FORMAT_INFO_MASK, source_2 ^ FORMAT_INFO_MASK) self.info.error_correction_level = ec_level_from_format_info_code(format_info >> 3) self.info.mask_id = format_info & 0b111
def test_dual_formats_one_right_one_wrong(self): samples = [ 0b010001111010110, # L0 0b011001000111101, # L4 0b000111101011001, # M3 0b001101110000101, # M6 0b110101100100011, # Q2 0b111010110010001, # Q5 0b100011110101100, # H1 0b101110000101001, # H7 ] for sample in samples: self.assertEqual(sample >> 10, validate_format_info(sample, sample)) self.assertEqual( sample >> 10, validate_format_info(sample ^ 0b111100000000000, sample ^ 0b000100000011101))
def test_completely_wrong_format_info(self): samples = [ 0b010001111010110, # L0 0b011001000111101, # L4 0b000111101011001, # M3 0b001101110000101, # M6 0b110101100100011, # Q2 0b111010110010001, # Q5 0b100011110101100, # H1 0b101110000101001, # H7 ] for sample in samples: self.assertNotEqual(sample >> 10, validate_format_info(sample ^ 0b111111000000000))
def test_completely_wrong_format_info(self): samples = [ 0b010001111010110, # L0 0b011001000111101, # L4 0b000111101011001, # M3 0b001101110000101, # M6 0b110101100100011, # Q2 0b111010110010001, # Q5 0b100011110101100, # H1 0b101110000101001, # H7 ] for sample in samples: self.assertNotEqual( sample >> 10, validate_format_info(sample ^ 0b111111000000000))
def test_validate_erroneous_format_info(self): single_bit_error = [ (0b010011111010110, 0b01000), # L0 (0b011001010111101, 0b01100), # L4 (0b000111001011001, 0b00011), # M3 (0b001100110000101, 0b00110), # M6 ] double_bit_error = [ (0b110101101000011, 0b11010), # Q2 (0b111110110011001, 0b11101), # Q5 (0b101011110001100, 0b10001), # H1 (0b111110000111001, 0b10111), # H7 ] triple_bit_error = [ (0b110101101000010, 0b11010), # Q2 (0b111110110011000, 0b11101), # Q5 (0b101011110001101, 0b10001), # H1 (0b111110000111000, 0b10111), # H7 ] for sample, correct in single_bit_error + double_bit_error + triple_bit_error: self.assertEqual(correct, validate_format_info(sample))