Пример #1
0
def code_point(u):
    print('character:', u)
    b = u.encode('utf-8')
    print('hexadecimal:', ' '.join('%02x' % i for i in bytearray(b)))
    a = bitarray(endian='big')
    a.frombytes(b)
    pprint(a)

    # calculate binary code point from binary UTF-8 representation
    if a[0:1] == bitarray('0'):
        c = a[1:8]
        assert len(a) == 8
    elif a[0:3] == bitarray('110'):
        c = a[3:8] + a[10:16]
        assert a[8:10] == bitarray('10')
        assert len(a) == 16
    elif a[0:4] == bitarray('1110'):
        c = a[4:8] + a[10:16] + a[18:24]
        assert a[8:10] == a[16:18] == bitarray('10')
        assert len(a) == 24
    elif a[0:5] == bitarray('11110'):
        c = a[5:8] + a[10:16] + a[18:24] + a[26:32]
        assert a[8:10] == a[16:18] == a[24:26] == bitarray('10')
        assert len(a) == 32
    else:
        raise
    code_point = ba2int(c)

    print('code point:', hex(code_point))
    print()
Пример #2
0
 def test_file(self):
     tmpdir = tempfile.mkdtemp()
     tmpfile = os.path.join(tmpdir, 'testfile')
     a = bitarray(1000)
     try:
         with open(tmpfile, 'w') as fo:
             pprint(a, fo)
         with open(tmpfile, 'r') as fi:
             b = eval(fi.read())
         self.assertEqual(a, b)
     finally:
         shutil.rmtree(tmpdir)
Пример #3
0
 def test_formatting(self):
     a = bitarray(200)
     for width in range(40, 130, 10):
         for n in range(1, 10):
             f = StringIO()
             pprint(a, stream=f, group=n, width=width)
             r = f.getvalue()
             self.assertEqual(eval(r), a)
             s = r.strip("bitary(')\n")
             for group in s.split()[:-1]:
                 self.assertEqual(len(group), n)
             for line in s.split('\n'):
                 self.assertTrue(len(line) < width)
Пример #4
0
 def get_code_string(a):
     f = StringIO()
     pprint(a, stream=f)
     return f.getvalue()
Пример #5
0
from __future__ import print_function
from bitarray.util import urandom, pprint, ba2base, base2ba

a = urandom(60)

for m in range(1, 7):
    n = 1 << m
    print("----- length: %d ----- base: %d ----- " % (m, n))
    pprint(a, group=m)
    rep = ba2base(n, a)
    print("representation:", rep)
    print()
    assert base2ba(n, rep) == a
Пример #6
0
    def slice_i(self, i):
        assert 0 <= i < self.N
        return slice(self.k * i, self.k * (i + 1))

    def __getitem__(self, i):
        return ba2int(self.array[self.slice_i(i)])

    def __setitem__(self, i, v):
        self.array[self.slice_i(i)] = int2ba(v, self.k)


if __name__ == '__main__':
    from random import randint

    # define array with 1000 integers, each represented by 5 bits
    a = SmallIntArray(1000, 5)

    b = []  # store values, for assertion below
    for i in range(1000):
        v = randint(0, 31)
        b.append(v)
        a[i] = v

    print(b[:5])
    print(a.array.buffer_info())
    pprint(a.array[:25], group=5)

    for i in range(1000):
        assert a[i] == b[i]