Start adding some tests

Improve the fixed_version function
Better binary search parameter return values
This commit is contained in:
david reid
2015-03-21 22:52:32 +00:00
parent c1876477c0
commit 8342904f7f
4 changed files with 38 additions and 17 deletions

View File

@@ -1,4 +1,4 @@
from setuptools import setup
from setuptools import setup, find_packages
from os import path
from zttf import __version__
@@ -32,5 +32,6 @@ setup(
'Programming Language :: Python :: 3.4',
],
keywords='fonts truetype ttf',
packages=['zttf']
packages=find_packages(exclude=['tests']),
test_suite='tests'
)

1
tests/__init__.py Normal file
View File

@@ -0,0 +1 @@
__author__ = 'david'

23
tests/utils_test.py Normal file
View File

@@ -0,0 +1,23 @@
import unittest
from zttf.utils import fixed_version, binary_search_parameters
class TestUtils(unittest.TestCase):
def test_fixed_version(self):
cases = [
(0x00005000, 0.5),
(0x00010000, 1.0),
(0x00035000, 3.5),
(0x00105000, 10.5)
]
for case in cases:
self.assertEqual(fixed_version(case[0]), case[1])
def test_binary_parameters(self):
cases = {
39: (5, 64, 14),
10: (3, 16, 4)
}
for n, result in cases.items():
self.assertEqual(binary_search_parameters(n), result)

View File

@@ -91,26 +91,22 @@ def fixed_version(num):
:param num: fixed 16:16 floating point number as a 32-bit unsigned integer
:return: version number (float)
"""
if num == 0x00005000:
return 0.5
elif num == 0x00010000:
return 1.0
elif num == 0x00020000:
return 2.0
elif num == 0x00025000:
return 2.5
elif num == 0x00030000:
return 3.0
return num
return float("{:04x}.{:04x}".format(num >> 16, num & 0x0000ffff))
def binary_search_parameters(length):
search_range = 1
entry_selector = 0
""" The TTF specification has several places that require binary search
parameters. For an example look at the CMAP Format 4 table.
:param length: The range over which the search will be performed.
:return: The 3 parameters required.
"""
search_range = 2
entry_selector = 1
while search_range * 2 <= length:
search_range *= 2
entry_selector += 1
return entry_selector, search_range, length - search_range
search_range *= 2
return entry_selector, search_range, 2 * length - search_range
class Range: