[varLib.featureVars] Add quadratic test

We get the optimal solution.
This commit is contained in:
Behdad Esfahbod 2018-11-09 18:59:28 -05:00
parent 34241a819b
commit f6bfc4139d

View File

@ -4,34 +4,56 @@ from fontTools.varLib.featureVars import (
overlayFeatureVariations)
def test_explosion(n = 10):
def test_linear(n = 10):
conds = []
for i in range(n):
end = i / n
start = end - 1.
region = [{'axis': (start, end)}]
region = [{'X': (start, end)}]
subst = {'g%.2g'%start: 'g%.2g'%end}
conds.append((region, subst))
overlaps = overlayFeatureVariations(conds)
assert len(overlaps) == 2 * n - 1, overlaps
return conds, overlaps
if __name__ == "__main__":
import sys
from pprint import pprint
quiet = False
args = {}
if len(sys.argv) > 1:
if sys.argv[1] == '-q':
quiet = True
del sys.argv[1]
args['n'] = int(sys.argv[1])
input, output = test_explosion(**args)
def test_quadratic(n = 10):
conds = []
for i in range(1, n + 1):
region = [{'X': (0, i / n),
'Y': (0, (n + 1 - i) / n)}]
subst = {str(i): str(n + 1 - i)}
conds.append((region, subst))
overlaps = overlayFeatureVariations(conds)
assert len(overlaps) == n * (n + 1) // 2, overlaps
return conds, overlaps
def run(test, n, quiet):
print()
print("%s:" % test.__name__)
input, output = test(n)
if quiet:
print(len(output))
else:
print()
print("Input:")
pprint(input)
print()
print("Output:")
pprint(output)
print()
if __name__ == "__main__":
import sys
from pprint import pprint
quiet = False
n = 3
if len(sys.argv) > 1 and sys.argv[1] == '-q':
quiet = True
del sys.argv[1]
if len(sys.argv) > 1:
n = int(sys.argv[1])
run(test_linear, n=n, quiet=quiet)
run(test_quadratic, n=n, quiet=quiet)