Exemplo n.º 1
0
def test_split_into_blocks():
    # <http://www.thonky.com/qr-code-tutorial/error-correction-coding>
    # HELLO WORLD as a 5-Q code
    s = '01000011 01010101 01000110 10000110 01010111 00100110 01010101 ' \
        '11000010 01110111 00110010 00000110 00010010 00000110 01100111 ' \
        '00100110 11110110 11110110 01000010 00000111 01110110 10000110 ' \
        '11110010 00000111 00100110 01010110 00010110 11000110 11000111 ' \
        '10010010 00000110 10110110 11100110 11110111 01110111 00110010 ' \
        '00000111 01110110 10000110 01010111 00100110 01010010 00000110 ' \
        '10000110 10010111 00110010 00000111 01000110 11110111 01110110 ' \
        '01010110 11000010 00000110 10010111 00110010 11100000 11101100 ' \
        '00010001 11101100 00010001 11101100 00010001 11101100'
    data = bits(s)
    buff = Buffer(data)
    codewords = list(buff.toints())
    assert 62 == len(codewords)
    ec_infos = consts.ECC[5][consts.ERROR_LEVEL_Q]
    assert ec_infos
    assert 2 == len(ec_infos)
    blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert 4 == len(blocks)
    assert 15 == len(blocks[0])
    assert bytearray(codewords[:15]) == blocks[0]
    assert 15 == len(blocks[1])
    assert 16 == len(blocks[2])
    assert 16 == len(blocks[3])
Exemplo n.º 2
0
def test_make_error_block_iso_i3():
    # ISO/IEC 18004:2006(E) - I.3 Encoding a Micro QR Code symbol  -- page 96
    # Input: 01234567
    # Symbol: M2-L
    s = '01000000 00011000 10101100 11000011 00000000'
    buff = Buffer(bits(s))
    error_s = '10000110 00001101 00100010 10101110 00110000'
    error_block = list(Buffer(bits(error_s)).toints())
    ec_infos = consts.ECC[consts.VERSION_M2][consts.ERROR_LEVEL_L]
    ec_info = ec_infos[0]
    assert ec_info.num_total - ec_info.num_data == len(error_block)
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert bytearray(error_block) == error_blocks[0]
Exemplo n.º 3
0
def test_make_error_block1():
    # <http://www.thonky.com/qr-code-tutorial/structure-final-message>
    # 5-Q
    codeword = '01000011 01010101 01000110 10000110 01010111 00100110 01010101 ' \
               '11000010 01110111 00110010 00000110 00010010 00000110 01100111 ' \
               '00100110'
    codeword_ints = [67, 85, 70, 134, 87, 38, 85, 194, 119, 50, 6, 18, 6, 103, 38]
    buff = Buffer(bits(codeword))
    assert codeword_ints == list(buff.toints())
    error_block = bytearray([213, 199, 11, 45, 115, 247, 241, 223, 229, 248, 154, 117, 154, 111, 86, 161, 111, 39])
    ec_infos = consts.ECC[5][consts.ERROR_LEVEL_Q]
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert error_block == error_blocks[0]
Exemplo n.º 4
0
def test_make_error_block_iso_i2():
    # ISO/IEC 18004:2006(E) - I.2 Encoding a QR Code symbol -- page 94
    # Input: 01234567
    # Symbol: 1-M
    s = '00010000 00100000 00001100 01010110 01100001 10000000 11101100 00010001 11101100 00010001 11101100 00010001 11101100 00010001 11101100 00010001'
    data_block = Buffer(bits(s))
    error_s = '10100101 00100100 11010100 11000001 11101101 00110110 11000111 10000111 00101100 01010101'
    error_block = list(Buffer(bits(error_s)).toints())
    ec_infos = consts.ECC[1][consts.ERROR_LEVEL_M]
    ec_info = ec_infos[0]
    assert ec_info.num_total - ec_info.num_data == len(error_block)
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, data_block)
    assert bytearray(error_block) == error_blocks[0]
Exemplo n.º 5
0
def test_make_error_block4():
    # <http://www.thonky.com/qr-code-tutorial/structure-final-message>
    # 5-Q
    codeword = '01000110 11110111 01110110 01010110 11000010 00000110 10010111 ' \
               '00110010 00010000 11101100 00010001 11101100 00010001 11101100 ' \
               '00010001 11101100'
    codeword_ints = [70, 247, 118, 86, 194, 6, 151, 50, 16, 236, 17, 236, 17,
                     236, 17, 236]
    buff = Buffer(bits(codeword))
    assert codeword_ints == list(buff.toints())
    error_block = bytearray([235, 159, 5, 173, 24, 147, 59, 33, 106, 40, 255,
                             172, 82, 2, 131, 32, 178, 236])
    ec_infos = (consts.ECC[5][consts.ERROR_LEVEL_Q][1],)
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert error_block == error_blocks[0]
Exemplo n.º 6
0
def test_make_error_block3():
    # <http://www.thonky.com/qr-code-tutorial/structure-final-message>
    # 5-Q
    codeword = '10110110 11100110 11110111 01110111 00110010 00000111 01110110 ' \
               '10000110 01010111 00100110 01010010 00000110 10000110 10010111 ' \
               '00110010 00000111'
    codeword_ints = [182, 230, 247, 119, 50, 7, 118, 134, 87, 38, 82, 6, 134,
                     151, 50, 7]
    buff = Buffer(bits(codeword))
    assert codeword_ints == list(buff.toints())
    error_block = bytearray([148, 116, 177, 212, 76, 133, 75, 242, 238, 76,
                             195, 230, 189, 10, 108, 240, 192, 141])
    ec_infos = (consts.ECC[5][consts.ERROR_LEVEL_Q][1],)
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert error_block == error_blocks[0]
Exemplo n.º 7
0
def test_make_error_block2():
    # <http://www.thonky.com/qr-code-tutorial/structure-final-message>
    # 5-Q
    codeword = '11110110 11110110 01000010 00000111 01110110 10000110 11110010 ' \
               '00000111 00100110 01010110 00010110 11000110 11000111 10010010 ' \
               '00000110'
    codeword_ints = [246, 246, 66, 7, 118, 134, 242, 7, 38, 86, 22, 198, 199,
                     146, 6]
    buff = Buffer(bits(codeword))
    assert codeword_ints == list(buff.toints())
    error_block = bytearray([87, 204, 96, 60, 202, 182, 124, 157, 200, 134, 27,
                             129, 209, 17, 163, 163, 120, 133])
    ec_infos = consts.ECC[5][consts.ERROR_LEVEL_Q]
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert error_block == error_blocks[0]
Exemplo n.º 8
0
def test_split_into_blocks():
    # <http://www.thonky.com/qr-code-tutorial/error-correction-coding>
    # HELLO WORLD as a 5-Q code
    s = '01000011 01010101 01000110 10000110 01010111 00100110 01010101 11000010 01110111 00110010 00000110 00010010 00000110 01100111 00100110 11110110 11110110 01000010 00000111 01110110 10000110 11110010 00000111 00100110 01010110 00010110 11000110 11000111 10010010 00000110 10110110 11100110 11110111 01110111 00110010 00000111 01110110 10000110 01010111 00100110 01010010 00000110 10000110 10010111 00110010 00000111 01000110 11110111 01110110 01010110 11000010 00000110 10010111 00110010 11100000 11101100 00010001 11101100 00010001 11101100 00010001 11101100'
    data = bits(s)
    codewords = Buffer(data).toints()
    assert 62 == len(codewords)
    ec_infos = consts.ECC[5][consts.ERROR_LEVEL_Q]
    assert ec_infos
    assert 2 == len(ec_infos)
    blocks, error_blocks = encoder.make_blocks(ec_infos, codewords)
    assert 4 == len(blocks)
    assert 15 == len(blocks[0])
    assert codewords[:15] == blocks[0]
    assert 15 == len(blocks[1])
    assert 16 == len(blocks[2])
    assert 16 == len(blocks[3])
Exemplo n.º 9
0
def test_make_error_block0():
    # <http://www.thonky.com/qr-code-tutorial/error-correction-coding>
    # 1-M
    codeword = '00100000 01011011 00001011 01111000 11010001 01110010 11011100 ' \
               '01001101 01000011 01000000 11101100 00010001 11101100 00010001 ' \
               '11101100 00010001'
    codeword_ints = [32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236, 17, 236, 17]
    buff = Buffer(bits(codeword))
    assert codeword_ints == list(buff.toints())
    error_block = bytearray([196, 35, 39, 119, 235, 215, 231, 226, 93, 23])
    ec_infos = consts.ECC[1][consts.ERROR_LEVEL_M]
    assert 1 == len(ec_infos)
    ec_info = ec_infos[0]
    assert 1 == ec_info.num_blocks
    assert 10 == ec_info.num_total - ec_info.num_data
    data_blocks, error_blocks = encoder.make_blocks(ec_infos, buff)
    assert len(error_block) == len(error_blocks[0])
    assert error_block == error_blocks[0]