-
Notifications
You must be signed in to change notification settings - Fork 10
/
test_widcode.py
95 lines (82 loc) · 3.38 KB
/
test_widcode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
##############################################################################
#
# Copyright (c) 2009 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Text Index Tests
"""
import unittest
_marker = object()
class Test_widcode(unittest.TestCase):
def test_encode_1_to_7_bits(self):
from ..widcode import encode
for wid in xrange(2**7):
code = encode([wid])
self.assertEqual(code, chr(wid + 128))
def test_encode_8_to_14_bits(self):
from ..widcode import encode
for wid in xrange(2**7, 2**14):
hi, lo = divmod(wid, 128)
code = encode([wid])
self.assertEqual(code, chr(hi + 128) + chr(lo))
def test_encode_15_to_21_bits(self):
from ..widcode import encode
for wid in xrange(2**14, 2**21, 255):
mid, lo = divmod(wid, 128)
hi, mid = divmod(mid, 128)
code = encode([wid])
self.assertEqual(code, chr(hi + 128) + chr(mid) + chr(lo))
def test_encode_22_to_28_bits(self):
from ..widcode import encode
STEP = (256 * 512) - 1
for wid in xrange(2**21, 2**28, STEP):
lmid, lo = divmod(wid, 128)
hmid, lmid = divmod(lmid, 128)
hi, hmid = divmod(hmid, 128)
code = encode([wid])
self.assertEqual(code,
chr(hi + 128) + chr(hmid) + chr(lmid) + chr(lo))
def test_decode_zero(self):
from ..widcode import decode
self.assertEqual(decode('\x80'), [0])
def test__decode_other_one_byte_asserts(self):
from ..widcode import _decode
for wid in range(1, 128):
self.assertRaises(AssertionError, _decode, chr(128+wid))
def test__decode_two_bytes_asserts(self):
from ..widcode import _decode
for wid in range(128, 2**14):
hi, lo = divmod(wid, 128)
code = chr(hi + 128) + chr(lo)
self.assertRaises(AssertionError, _decode, code)
def test__decode_three_bytes(self):
from ..widcode import _decode
for wid in range(2**14, 2**21, 247):
mid, lo = divmod(wid, 128)
hi, mid = divmod(mid, 128)
code = chr(hi + 128) + chr(mid) + chr(lo)
self.assertEqual(_decode(code), wid)
def test__decode_four_bytes(self):
from ..widcode import _decode
STEP = (256 * 512) - 7
for wid in range(2**21, 2**28, STEP):
lmid, lo = divmod(wid, 128)
hmid, lmid = divmod(lmid, 128)
hi, hmid = divmod(hmid, 128)
code = chr(hi + 128) + chr(hmid) + chr(lmid) + chr(lo)
self.assertEqual(_decode(code), wid)
def test_symmetric(self):
from ..widcode import decode
from ..widcode import encode
for wid in xrange(2**14, 2**21, 247):
wids = [wid]
code = encode(wids)
self.assertEqual(decode(code), wids)